CodenameOne iOS通过AppLink打开应用时AppArg为null问题求助
当通过关联域(associated domains)功能指定的AppLink打开iOS应用时,获取到的AppArg为null。没有出现已知issue中描述的start()方法连续调用的情况,当前场景中start()仅被调用一次,且传入的AppArg为null。
我在start()方法中执行的第一行代码为:
Display.getInstance().getProperty("AppArg",null);
通过自定义scheme打开应用时该逻辑运行正常,但通过AppLink打开时失效。
注:我原本使用ios.glAppDelegateBody和ios.afterFinishLaunching构建提示处理推送通知打开应用的逻辑,猜测该逻辑可能干扰AppArg读取,因此临时移除相关配置重试,问题依旧存在。
目前我能想到的唯一解决方案是编写原生代码获取启动URL,但我更希望AppArg能按照预期正常工作,测试环境为搭载iOS 15.1的iPhone 6s。
更新1
当应用在后台运行时,点击AppLink打开应用会触发start、stop、start的流程,两次调用start()时AppArg都正常填充了AppLink内容,该场景下无问题。但如果应用已被关闭,点击AppLink打开应用时,start()仅被调用一次,且AppArg为null,这就是目前的问题。
shouldApplicationHandleURL方法从未被调用,我已经在主应用类中实现了该方法并返回true。
我还尝试添加原生代码来获取冷启动场景下的AppLink,尝试将如下代码添加到glAppDelegateBody构建提示中,但构建失败,报错提示continueUserActivity重复定义,代码如下:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { NSURL *url = userActivity.webpageURL; // Handle url return YES; }
目前我已经没有其他思路了,恳请大家帮忙,谢谢。
更新2
我按照官方文档的要求,在域名托管的apple-app-site-association文件中添加了如下片段:
"activitycontinuation": { "apps": [ <我的应用ID> ] }
添加后问题依旧存在。该文档还要求添加类似activitycontinuation:example.com的关联域权限,因此我在ios.associatedDomains构建提示中新增了该配置,配置内容如下:
ios.associatedDomains=applinks:mydomain.com,activitycontinuation:mydomain.com
配置后问题仍未解决,构建可以正常完成,但我不确定CodenameOne是否实际对activitycontinuation服务做了处理,问题依旧没有解决。
更新3
该问题是由于didFinishLaunchingWithOptions中调用Facebook SDK导致方法返回NO,阻止了continueUserActivity执行并获取启动URL,有问题的代码如下:
return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
当CodenameOne配置中存在facebook.appId构建提示时就会执行上述代码,我移除该配置后问题就解决了,但如果你的应用需要使用Facebook Connect功能,就不能采用该方案。
内容的提问来源于stack exchange,提问作者Adrian Ionescu

