iOS常见问题

1. openinstall是否兼容微信openSDK1.8.6以上版本的通用链接(universal links)跳转功能?

是的,openinstall一键跳转的原有设计为:在App已安装的情况下,openinstall通过标准的scheme,universal links等技术,从各种浏览器(兼容国内50+主流浏览器与社交平台,包括QQ、新浪微博、钉钉等主流社交软件的内置浏览器)一键跳转App并传递自定义参数,一键直达页面。
除了可携带参数的跳转服务外,对于微信登录和分享等需要跳转的场景也是支持的,但只提供跳转服务。
使用openinstall一键跳转服务是完全免费的,而且可以节省开发时间:
(1)客户端开发者可以自己测试,不必麻烦服务端做配置证书和传文件
(2)通用链接要求服务器必须支持https,且是受苹果信任的证书,用openinstall省去了麻烦
支持微信通用链接跳转功能是可选项,并不影响SDK的原有功能,即从web页跳转app并携带参数的功能。另外,关联域名是可以配置多个的
适配注意事项:
微信初始化参考这段代码,universalLink严格按照该格式填写(不要遗漏/ulink/):

//your_wxAppID从微信后台获取,yourAppkey从openinstall后台获取
[WXApi registerApp:@"your_wxAppID" universalLink:@"https://yourAppkey.openinstall.io/ulink/"];

通用链接跳转App的系统回调里,注意不要提前return

-(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
    //处理通过openinstall一键唤起App时传递的数据
    [OpenInstallSDK continueUserActivity:userActivity];

    //处理微信通过Universal Link启动App时传递的数据
    return [WXApi handleOpenUniversalLink:userActivity delegate:self];
}

微信开放平台后台Universal links配置,要和上面代码中的保持一致

2. iOS14下,为什么会出现通用链接无法跳转的情况,如何解决?

参考官方文档
说明:
1)使用iOS通用链接功能时,需在entitlements配置applink前缀的关联域名,app安装时系统将通过抓取关联域名下的AASA文件,以验证域名的合法性。
2)iOS14开始,app安装时系统不再直接抓取AASA文件,改由Apple的CDN服务器来抓取,抓取后将在CDN服务器上缓存该文件,该缓存期限大概48小时左右;在此缓存期间,对teamId或bundle id的修改都将导致通用链接无法正常测试;或是用户未在openinstall平台配置teamId,bundleId时,运行了带关联域名配置的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”,开启开关。(手机连接上Xcode或进行过真机调试会出现“开发者”选项,手机重启开发者选项会消失,需要重新连接Xcode)

3. iOS无法获取自定义参数?

(1)检查是否按照文档集成相关代码
(2)是否将集成好sdk 的ipa包上传到openinstall (ios上传包是方便测试,上传第一个包后可以通过Xcode安装的方式进行调试)
(3)测试时需要将已安装的App卸载,不能覆盖安装测试 (测试时可以使用openinstall 控制中心提供测试网页测试- 在线测试)

4. 每次调用getInstallParmsCompleted方法都会回调,会触发业务重复调用,怎么办?

自SDK 2.2.0开始,SDK内部将会一直保存安装数据,每次调用getInstallParmsCompleted方法都会返回值,如果调用了getInstallParmsCompleted并处理了自己的业务,后续不想再被触发,那么可以自己在业务调用成功时,设置一个标识,不再调用getInstallParmsCompleted方法。例如:

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"isFirst"]) {
    [[OpenInstallSDK defaultManager] getInstallParmsCompleted:^(OpeninstallData*_Nullable appData) {
        //1.如果不管回调是否有参数返回,都不想再处理,比如只想首次打开App时处理或涉及到页面跳转等,可直接修改标示
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isFirst"];

        /*2.如果是存粹在后台处理业务,不涉及到页面(如跳转等业务),且不会影响用户界面操作的情况下,可在**数据返回成功**后修改标示,这样可尽最大可能提高参数获取成功率
        if (appData.data || appData.channelCode) {
            [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isFirst"];
        }*/
    }];
}

5. 集成iOS端sdk时需要注意的问题是什么?

(1)不要自己保存动态安装参数,在每次需要用到参数时,请调用安装参数获取方法getInstallParmsCompleted去获取
(2)安装参数获取方法getInstallParmsCompleted尽量写在业务场景需要参数的位置调用(在业务场景时,网络一般都是畅通的)
原因是iOS首次安装、首次启动的App,会询问用户获取网络权限,用户允许后SDK才能正常联网去获取参数。如果调用过早,可能导致网络权限还未允许就被调用,导致参数无法及时拿到,误以为参数不存在(此时getInstallParmsCompleted方法已超时,回调返回空)

6. ios安装时希望安装确认弹窗提示里面显示自己的域名

在 openinstall后台 -> iOS集成 -> iOS下载设置 里面,将自己的plist地址配置到“OTA在线安装”一栏即可。

7. 通用链接(Universal Links)在iOS 11.2+中,偶尔会出现失效,无法跳转App的情况?

这是苹果iOS 11.2+ 出现的系统bug导致的(偶然发生的),解决方法就是“删除App,重启设备,重新安装App”,苹果方面目前还没有完全解决这个问题,我们将持续跟进。

8. 微信中通用链接(Universal Links)被禁用了?

微信在6.6.1版本后,禁止了Universal Links的使用,将提示右上角打开Safari来跳转App,其它App和浏览器不受影响。微信7.0.5版本后,重新放开了Universal Links的使用。

9. 如何查看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:ss.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

10. 什么情况safari浏览器出现“无法打开网页,网址无效”的弹窗?

这是因为safari在通过scheme执行跳转时,如果App不存在,系统就会出现这样的提示。

11. 重签名的安装包,如果无法正常使用通用链接怎么办?

需要进入openinstall后台,在iOS集成的应用配置里,开启scheme和跳转优先选项,关闭通用链接选项,然后进入文档,根据文档集成好需要的配置。

12. iOS渠道链接注册量怎样统计?

如果使用 openinstall 控制中心提供的渠道统计功能时,可调用注册统计方法来统计渠道注册量[OpenInstallSDK reportRegister], 其他场景请忽略。

13. 安装量统计的实现,需要知道您的文件下载路径,请按照以下规则提供

(1)IPA测试包:下载上传到openinstall控制台的ipa包,经短信注册验证后每日测试上限10个ip。
(2)App Store及其它:可以配置第三方地址,例如App Store链接、fir、蒲公英、企业签名分发地址、超级签名下载页地址、testflight地址等。
(3)OTA在线安装:仅限于填写plist文件地址,无需加itms-services://?action=download-manifest&url=部分。

14. iOS app工程中配置好了关联域名,但是导出的ipa解析显示未正确集成

先检查entitlements文件中关联域名配置是否正确,比如是否多了空格符等,还可以尝试重新生成一次entitlements文件