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

Sk.*_*zad 136 ios ios9

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

let instagramURL = NSURL(string: "instagram://app")
Run Code Online (Sandbox Code Playgroud)

为什么网址不会打开?

the*_*aws 207

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将在后续版本中修复此问题.

  • 作为澄清,请勿在LSApplicationQueriesSchemes数组中列入特定应用的字符串中包含"://",即"comgooglemaps://".如果你确实包含"://"canOpenUrl:将返回NO并提供"此应用程序不允许查询方案xxx"syslog /错误.但是,当您实际调用canOpenUrl时:您仍然必须包含冒号,即canOpenUrl:@"comgooglemaps:". (23认同)
  • 事实上,苹果确实在最近的更新中解决了这个问题.`-openURL:`即使`-canOpenURL:`有限,也总是有效. (5认同)

Mat*_*uif 152

如上所述,您想在信息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>
Run Code Online (Sandbox Code Playgroud)

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


Leo*_*ica 86

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

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

<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 
Run Code Online (Sandbox Code Playgroud)


Aws*_*sed 25

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

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>testA</string>
        </array>
    </dict>
</array>
Run Code Online (Sandbox Code Playgroud)

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

[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TestA://"]];
Run Code Online (Sandbox Code Playgroud)

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

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>TestA</string>
</array>
Run Code Online (Sandbox Code Playgroud)

可以在此处找到有效的实现:https: //github.com/gatzsche/LSApplicationQueriesSchemes-Working-Example


Kae*_*aey 22

来自,会议703 WWDC 2015:

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

例如,加入FB