通过自定义URL Scheme调用iOS应用程序

3

我正在开发一个原生iOS应用程序,在我的Info.plist.xml文件中,我得到了以下内容:

<key>CFBundleURLTypes</key>
  <array>
     <dict>
       <key>CFBundleURLName</key>
            <string>digitalsigner.com</string>
       <key>CFBundleURLSchemes</key>
            <array>
                <string>http</key>
            </array>
     </dict>
  </array>

当我在iOS模拟器的Safari中访问链接http://digitalsigner.com,或者打开一个包含http://digitalsigner.com链接的HTML页面时,我的应用程序无法启动。
我做错了什么,或是缺少什么呢?
谢谢, 最好的祝福, 威廉。
4个回答

2
如果有多个应用程序注册同一个URL scheme,系统行为是未定义的。由于系统默认的http协议已经被Safari注册了,因此我不会对能否在自己的应用中使用它抱有太大的期望。
苹果提供了内置支持http、mailto、tel和sms URL scheme。它还支持针对Maps、YouTube和iPod应用程序的基于http的URL。这些scheme的处理程序是固定的,不能更改。如果您的URL类型包含与苹果定义的相同的scheme,则启动的是苹果提供的应用程序而不是您的应用程序。 注意:如果有超过一个第三方应用程序注册来处理相同的URL scheme,则目前没有确定哪个应用程序将获得该scheme的过程。

谢谢大家。我已经将CFBundleURLSchemes更改为其他单词,它起作用了 :) 只有一个问题,如果我有一个URL Scheme,例如anything://digitalsigner.com?link="anyothersite.com/abc.pdf",我如何获取链接值?我知道这与NSDicitonary有关,但是什么是适当的方法?再次感谢您。 - William

0
根据苹果文档,如果有多个应用程序注册了相同的URL方案,则无法保证哪个应用程序将接收请求。我强烈认为MobileSafari已经注册了http方案,这就是为什么您的应用程序没有启动的原因。

谢谢大家。我已经将CFBundleURLSchemes更改为其他单词,它起作用了 :) 只有一个问题,如果我有一个URL Scheme,例如anything://digitalsigner.com?link="anyothersite.com/abc.pdf",我如何获取链接值?我知道这与NSDicitonary有关,但是什么是适当的方法?再次感谢您。 - William
要获取查询字符串(?后面的所有内容),您可以使用yourUrl.query属性。要将其转换为NSDictionary,您可以使用来自例如https://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMNSDictionary%2BURLArguments.m的代码。然后,您将能够通过`NSDictionary* theDict = [url.query gtm_dictionaryWithHttpArgumentsString]; DoSomethingWithLink(theDict[@"link"]);`访问链接值。希望对您有所帮助。 - Andrey

0

自定义URL Scheme是地址的“前缀”,就像协议类型 - 例如,“http://”,“fb://”,“tel://”。 在您的情况下,URL方案是@“http://”或@“https://”。对于这些方案,系统已经注册了应用程序。 很抱歉,但您不能在所有情况下都实现您想要的。


谢谢大家。我已经将CFBundleURLSchemes更改为其他单词,它起作用了 :) 只有一个问题,如果我有一个URL Scheme像anything://digitalsigner.com?link="anyothersite.com/abc.pdf",我如何获取链接的值?我知道这与NSDicitonary有关,但适当的方法是什么?再次感谢你们。 - William

0

尝试输入此网址 digitalsigner.com://

对我来说它有效。


谢谢大家。我已经将CFBundleURLSchemes更改为其他单词,它起作用了 :) 还有一件事,如果我有一个URL Scheme,例如anything://digitalsigner.com?link="http://anyothersite.com/abc.pdf",我该如何获取链接值?我知道这与NSDicitonary有关,但是什么是适当的方法?再次感谢您。 - William

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接