如果我希望iOS App App1在设备上启动App2,那么CFBundleURLName是否需要匹配Info.plist中CFBundleURLTypes中的CFBundleIdentifier?
例如,如果我在App1中
<key>CFBundleIdentifier</key>
<string>com.foo.App1</string>
...
<key>CFBundleURLTypes</key>
<array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fooscheme</string>
</array>
<key>CFBundleURLName</key>
<string>com.foo.App1</string>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,App2可以在App1中启动"fooscheme:"url.但是,如果我将App1的Info.plist更改为包含
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fooscheme</string>
</array>
<key>CFBundleURLName</key>
<string>com.foo.xyz</string>
</dict>
</array>
Run Code Online (Sandbox Code Playgroud)
即,CFBundleURLName!= CFBundleIdentifier,然后App2再也无法在App1中启动"fooscheme:"url.
有什么想法吗?
我没有看到CFBundleIdentifier必须与CFBundleURLName匹配的任何Apple文档,但实际情况似乎如此.或者我错过了什么?
谢谢!
不,这两个属性不需要匹配,我没有像你那样有问题,我有我的应用程序标识符CFBundleIdentifier
- 设置为com.djp.myapp并且url方案设置为CFBundleURLName
设置为nothing.like. the.identifier和CFBundleURLSchemes
一套abcd.
我可以通过调用打开这个应用程序: abcd://
我能想到的一件事可能是给你带来一个问题,如果你运行你的应用程序设置了url方案,并且在测试期间你改变了你的包标识符(CFBundleIdentifier
),从而实际上导致2个应用程序存在于系统中.在这种情况下,您将遇到网址方案冲突,Apple声明没有任何流程可以确定哪个应用优先.
注意:如果多个第三方应用程序注册以处理相同的URL方案,则目前没有确定将为该方案提供哪个应用程序的过程.
此外,据我测试和经验,如果你有两个冲突的应用程序,它似乎是第一个安装使用,并删除此应用程序时,第二个应用程序,现在是唯一支持特定网址方案的应用程序仍未使用.
这表明url方案在安装时已在系统中注册,并且需要新安装此应用程序才能使其按预期方式处理这些方案.
有关URL Schemes的更多信息,请查看Apple Advances App Tricks文档.
归档时间: |
|
查看次数: |
10443 次 |
最近记录: |