iOS 9没有使用URL SCHEME打开Instagram应用程序

问题描述 投票:135回答:14

以下URL在iOS 8.3及更低版本上打开,但它不起作用且iOS 9

let instagramURL = NSURL(string: "instagram://app")

为什么网址不会打开?

ios ios9
14个回答
206
投票

iOS 9对URL方案的处理做了一些小改动。您必须使用LSApplicationQueriesSchemes中的Info.plist密钥将您的应用程序调用的网址列入白名单。

请看这里的帖子:http://awkwardhare.com/post/121196006730/quick-take-on-ios-9-url-scheme-changes

主要结论是:

如果您对不在白名单中的URL调用“canOpenURL”方法,即使安装了已注册处理此方案的应用程序,它也将返回“NO”。将出现“此应用程序不允许查询方案xxx”syslog条目。

如果您对不在白名单中的网址调用“openURL”方法,则会以静默方式失败。将出现“此应用程序不允许查询方案xxx”syslog条目。

作者还推测这是操作系统的一个错误,Apple将在后续版本中修复此问题。


0
投票

似乎没有人解决过如何指定带有嵌入参数的URL。任何包含参数的URL都无法在LSApplicationsQueriesSchemes中指定特定的URL。例如,假设我有一个通过发件人电子邮件地址的电子邮件应用程序:

myemail://[email protected]

它似乎让它在iOS9中工作的唯一方法是删除任何参数。


0
投票

Apple在iOS 9上更改了canOpenURL方法。在iOS 9和iOS 10上检查URL Schemes的应用程序必须在提交给Apple时声明这些方案。


0
投票

对于PayPal,请添加以下URL方案:

enter image description here

请参阅此link


0
投票

Swift 3.1,Swift 3.2,Swift 4

if let urlFromStr = URL(string: "instagram://app") {
    if UIApplication.shared.canOpenURL(urlFromStr) {
        if #available(iOS 10.0, *) {
            UIApplication.shared.open(urlFromStr, options: [:], completionHandler: nil)
        } else {
            UIApplication.shared.openURL(urlFromStr)
        }
    }
}

在Info.plist中添加这些:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>instagram</string>
</array>

-1
投票

当我今天尝试从我自己的应用程序调用Facebook时,我发现没有可以添加到LSApplicationQueriesSchemesInfo.plist密钥(Xcode版本8.2.1(8C1002))。我用Sublime Text打开Info.plist并手动将其添加到文件中,然后就可以了。只是为了让您知道,如果您找不到钥匙,只需自己添加即可。


150
投票

如上所述,您想在信息plist中添加一个键,这是大多数社交网络的列表

<key>LSApplicationQueriesSchemes</key>
    <array>
     <string>fb</string>
     <string>fbapi</string>
     <string>fbauth2</string>
     <string>fbshareextension</string>
     <string>fb-messenger-api</string>
     <string>twitter</string>
     <string>viber</string>
     <string>whatsapp</string>
     <string>wechat</string>
     <string>line</string>
     <string>instagram</string>
     <string> instagram-stories</string>
     <string>kakaotalk</string>
     <string>mqq</string>
     <string>vk</string>
     <string>comgooglemaps</string>
     <string>googlephotos</string>
     <string>ha</string>
     <string>yammer</string>
    </array>

*前三场比赛Facebook(FBSDK 4.6):fbapi,fbauth2,fbshareextension。 “哈”是为了冒险


86
投票

这是iOS 9的新安全功能。请查看WWDC 2015 Session 703以获取更多信息。

使用SDK 9构建的任何应用程序都需要在其plist文件中提供LSApplicationQueriesSchemes条目,声明它尝试查询哪些方案。

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

25
投票

假设有两个应用程序TestA和TestB。 TestB想要查询是否安装了TestA。 “TestA”在其info.plist文件中定义了以下URL方案:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testA</string>
        </array>
    </dict>
</array>

第二个应用程序“TestB”试图通过调用以确定是否安装了“TestA”:

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];

但这通常会在iOS9中返回NO,因为需要将“TestA”添加到TestB的info.plist文件中的LSApplicationQueriesSchemes条目中。这是通过将以下代码添加到TestB的info.plist文件来完成的:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>TestA</string>
</array>

可以在这里找到一个有效的实现:https://github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example


22
投票

来自,会议703 WWDC 2015:

您可以在为iOS 9构建应用程序时继续使用URL方案,并且要调用URL方案,现在需要在应用程序Info.plist中声明它们。有一个新密钥LSApplicationQueriesSchemes,在这里你需要添加你想要的方案列表canOpenURL。

For instance, incase of FB


2
投票

即使使用@Matthieu答案(其他社交网址100%正确),Facebook共享对话框中的共享也会失败。我不得不添加一组从Facebook SDK中反转的URL。

<array>
        <string>fbapi</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
        <string>fb-messenger-api</string>
        <string>twitter</string>
        <string>whatsapp</string>
        <string>wechat</string>
        <string>line</string>
        <string>instagram</string>
        <string>kakaotalk</string>
        <string>mqq</string>
        <string>vk</string>
        <string>comgooglemaps</string>
        <string>fbapi20130214</string>                                                    
        <string>fbapi20130410</string>                                                     
        <string>fbapi20130702</string>                                                    
        <string>fbapi20131010</string>                                                    
        <string>fbapi20131219</string>                                                    
        <string>fbapi20140410</string>                                                     
        <string>fbapi20140116</string>                                                     
        <string>fbapi20150313</string>                                                     
        <string>fbapi20150629</string>
    </array>

1
投票

值得注意的是,9.0.x上的越狱手机有一个错误,它破坏了网址方案。如果您正在运行越狱设备,请确保在Cydia中更新Patch


1
投票

那么你可以通过直接调用openURL:openURL:options:completionHandler:(iOS 10以上)打开一个应用程序,而无需进行条件检查canOpenURL:。请阅读Apple doc for canOpenURL: method中的讨论部分,其中说:

openURL:方法不受LSApplicationQueriesSchemes要求的约束。


1
投票

在Swift 4.2和Xcode 10.1中

在info.plist中需要添加CFBundleURLSchemes和LSApplicationQueriesSchemes。

- >在项目中选择info.plist,

- >右键单击,

- >选择Open As Source Code

请参见下面的屏幕截图

enter image description here

- >将打开xml文件

- >复制 - 粘贴下面的代码并替换为您的ID

CFBundleURLSchemes和LSApplicationQueriesSchemes用于gmail,fb,twitter和链接。

<key>CFBundleURLTypes</key>
    <array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>li5****5</string>
            <string>com.googleusercontent.apps.8***************5f</string>
            <string>fb8***********3</string>
            <string>twitterkit-s***************w</string>
        </array>
    </dict>
</array>
<key>FacebookAppID</key>
<string>8*********3</string>
<key>FacebookDisplayName</key>
<string>K************ app</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-share-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>

    <string>twitter</string>
    <string>twitterauth</string>

    <string>linkedin</string>
    <string>linkedin-sdk2</string>
    <string>linkedin-sdk</string>

</array>

请参阅下面的屏幕,您的最终info.plist文件是

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.