iOS常见问题
1. 集成后,部分设备突然出现一键拉起功能失效的情况?
第一种情况:
参考苹果官方文档
说明:
1)使用iOS通用链接功能时,需在entitlements配置applink前缀的关联域名,App安装时系统将通过抓取关联域名下的AASA文件,以验证域名的合法性。
2)iOS14开始,App安装时系统不再直接抓取AASA文件,改由Apple的CDN服务器来抓取,抓取后将在CDN服务器上缓存该文件,该缓存期限大概48小时左右;在此缓存期间,对Team Id或Bundle Identifier的修改都将导致通用链接无法正常测试;或是用户未在openinstall平台配置Team Id、Bundle Identifier时,运行了带关联域名配置的App也将触发CDN服务器的缓存。
3)为方便开发者测试通用链接功能,我们建议开发者新增一个developer模式的关联域名。
解决方案:
第一种方案:等大约2天后再进行测试,此时苹果CDN清除了缓存
第二种方案:多添加一个开发者模式,具体如下:
- 第一步:在关联域名(Associated Domains)处,多添加一个开发模式的关联域名,如下图所示:
注:默认的关联域名(applinks:yourAppkey.openinstall.io)是必须填写的,开发模式的关联域名(applinks:yourAppkey.openinstall.io?mode=developer)用于解决开发阶段通用链接出现问题时使用。"yourAppkey"是对应的应用的appkey,可从应用后台获取。
或者entitlements文件处修改为:
- 第二步:测试手机需要开启“开发模式”
在iOS14以上手机里,找到“设置”-“开发者”,找到“Associated Domains Development”,开启开关(iOS16之后在“设置”-“隐私与安全性”-“开发者模式”)。(iOS16以下的手机连接上Xcode或进行过真机调试会出现“开发者”选项,手机重启开发者选项会消失,需要重新连接Xcode)
第二种情况:
其次,当手机使用Safari浏览器无痕模式访问H5网页,OpenInstall js尝试使用通用链接协议唤醒App时,浏览器会弹出询问是否打开APP,此时如果用户点击取消浏览器则会记忆此次操作行为,从而导致后面的尝试唤醒失效。此类问题可以通过进入手机桌面的设置-Safari浏览器,选择“清除历史记录与网站数据”来恢复功能。
2. 集成iOS sdk时获取安装参数(App传参安装功能)需要注意的问题
(1)不要自己保存动态安装参数,在每次需要用到参数时,请调用安装参数获取方法getInstallParmsCompleted
去获取
(2)由于iOS系统的机制,App首次安装打开后需要用户手动允许网络权限。因此安装参数获取方法尽可能在业务场景真正需要参数时去调用获取(因为在用户处于App业务场景进行时,网络一般都是畅通的)。
注:OpenInstall App SDK有等待机制,开发者调用安装参数获取方法时SDK会尝试去获取初始化阶段请求到的参数信息。若初始化由于某些原因(例如网络不畅通)则会进行循环尝试直到成功,此时安装参数获取方法也会进入等待状态,直到达到最大等待时长(一般默认10S,支持自定义)才会返回空参数内容。
3.Safari浏览器出现“无法打开网页,网址无效”的弹窗
由于Safari在尝试通过scheme打开对应的App时,如果检测到设备中不存在该scheme对应的App,Safari浏览器就会“无法打开网页,网址无效”提示。
4.iOS App工程中配置好了关联域名,但是导出的ipa解析显示未正确集成
(1)检查entitlements文件中关联域名配置是否正确,例如是否包含了空格符、大小写是否正确等。
(2)检查是否在debug、release版本都生效了。
(3)如果以上配置无误,可以尝试重新生成一次entitlements文件。
5. 如何查看ipa包中associated domain中包含的内容是否正确?
以example.ipa文件为例:
(1)$ cd example.ipa所在文件
(2)$ unzip example.ipa
(3)$ codesign -d --entitlements - Payload/example的全路径
查看com.apple.developer.associated-domains中是否包含了openinstall的域名,命令行输入正确,则能看到约如下输出:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>application-identifier</key>
<string>6E65F4E7IUX.com.fs.openinstall</string>
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:appkey.openinstall.io</string>
</array>
<key>com.apple.developer.team-identifier</key>
<string>6E65F4E7IUX</string>
<key>get-task-allow</key>
<false/>
</dict>
</plist>
如上,applinks:ss.openinstall.io为openinstall关联域名,说明配置正确。
也可通过这个方法,查看Team ID和bundle ID,此处Team ID为6E65F4E7IUX,bundle ID为com.fs.openinstall
6. openinstall是否兼容微信和QQ新版本SDK的通用链接(universal links)拉起功能?
是的,openinstall一键拉起的原有设计为:在App已安装的情况下,openinstall通过标准的scheme,universal links等技术,从各种浏览器(兼容国内50+主流浏览器与社交平台,包括QQ、新浪微博、钉钉等主流社交软件的内置浏览器)一键拉起App并传递自定义参数,一键直达页面。
除了可携带参数的拉起服务外,对于微信和QQ登录、分享等需要拉起的场景也是支持的,但只提供拉起服务。
使用openinstall一键拉起服务是完全免费的,而且可以节省开发时间:
(1)客户端开发者可以自己测试,不必麻烦服务端做配置证书和传文件
(2)通用链接要求服务器必须支持https,且是受苹果信任的证书,用openinstall省去了麻烦
支持微信、QQ通用链接拉起功能是可选项,并不影响SDK的原有功能,即从web页拉起App并携带参数的功能。另外,关联域名是可以配置多个的
详细配置参考文档:通用链接使用指南
7. iOS隐私清单(PrivacyInfo.xcprivacy)相关问题
在SDK >= 2.8.3时,SDK会默认包含隐私清单文件,即PrivacyInfo.xcprivacy
1、使用CocoaPods集成时
pod集成SDK时,提供了隐私清单文件(PrivacyInfo.xcprivacy),是bundle形式存在的,可能会导致在xcode14之后编译提示未签名的错误:Signing for "libOpenInstallSDK-OPPrivacy" requires a development team.
可以在Podfile
文件中做如下配置,然后重新pod install
(推荐):
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
target.build_configurations.each do |config|
config.build_settings['CODE_SIGN_IDENTITY'] = ''
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
end
end
end
end
2、手动集成时
SDK源码中包含了隐私清单文件(PrivacyInfo.xcprivacy),请注意需要将源代码目录下的PrivacyInfo.xcprivacy
拷贝进您的代码工程里,PrivacyInfo.xcprivacy
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSPrivacyAccessedAPITypes</key>
<array>
<dict>
<key>NSPrivacyAccessedAPIType</key>
<string>NSPrivacyAccessedAPICategoryUserDefaults</string>
<key>NSPrivacyAccessedAPITypeReasons</key>
<array>
<string>CA92.1</string>
</array>
</dict>
</array>
<key>NSPrivacyCollectedDataTypes</key>
<array/>
<key>NSPrivacyTracking</key>
<false/>
<key>NSPrivacyTrackingDomains</key>
<array/>
</dict>
</plist>
开发者也可以直接将SDKPrivacyInfo.xcprivacy
中的条款复制并补全到自己App的PrivacyInfo.xcprivacy
里