codenameone - 代号:通过 applink 打开应用时,iOS 上的 AppArg 为空
问题描述
当通过关联域功能指定的 applink 打开我的 ios 应用程序时,AppArg 为空。
如本期start()
所述,方法的连续调用不会发生。就我而言,仅调用一次,AppArg 为空,仅此而已。start()
在方法中,首先要做的start()
是调用
Display.getInstance().getProperty("AppArg",null);
这在通过自定义方案打开应用程序时工作正常,但在通过应用程序链接打开时不行。
注意:我使用ios.glAppDelegateBody
和ios.afterFinishLaunching
构建提示来处理通过推送通知打开的应用程序。我认为这可能会干扰 AppArg 的读取,所以我暂时删除了这些并再次尝试,但无济于事。
目前,我看到的唯一解决方案是编写一些本机代码并尝试以这种方式获取打开的 url,但我非常希望 AppArg 能够像它所说的那样工作。
我已经在带有 ios 15.1 的 iphone 6s 上进行了测试。
更新 3:
发生此问题是由于调用 facebook sdkdidFinishLaunchingWithOptions
导致该方法返回 NO,并阻止 continueUserActivity 执行和检索启动 url。有问题的代码是这样的:
return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
facebook.appId
如果代号设置中存在构建提示,则会执行此代码。
在我删除它之后,事情开始起作用了。
但是,如果您实际使用 facebook connect,您将无法执行此操作。
更新 2
根据此处apple-app-site-association
的文档,我将以下代码段添加到托管在我的域上的文件中。
"activitycontinuation": { "apps": [ <id of my app> ] }
它仍然没有工作。
相同的文档还说明了相关的域权利,如下所示:activitycontinuation:example.com
应该添加。所以我将它与应用链接一起添加到 ios.associatedDomains 构建提示中,如下所示:
ios.associatedDomains=applinks:mydomain.com,activitycontinuation:mydomain.com
它仍然没有工作。构建成功了,但我不确定代号一实际上是在做一些activitycontinuation
服务。
所以,问题还是没有解决!
更新:
因此,流程启动、停止、启动仅在应用程序处于后台并通过应用程序链接单击打开时发生,并且两次启动都使用填充了应用程序链接的 AppArg 调用。在这种情况下一切顺利。
但是,如果应用程序已关闭,并通过 applink 单击打开,则仅调用一次 start 并且 AppArg 为空。问题!
该方法shouldApplicationHandleURL
永远不会被调用。我在主应用程序类上实现了它,返回 true。
我还尝试添加本机代码以尝试获取应用程序链接,以应对应用程序先前关闭的情况。我试图将下面的代码添加到glAppDelegateBody
构建提示中,但构建失败并抱怨它continueUserActivity
是重复的。使用的代码是这样的:
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler {
NSURL *url = userActivity.webpageURL;
// Handle url
return YES;
}
目前,我的想法不多了。所以,请帮忙。谢谢你。
解决方案
iOS 使用与自定义应用程序 URL 方案不同的机制来处理应用程序链接,因此这里可能存在竞争条件 - 在将 URL 提供给应用程序之前调用 start()。
尝试在主生命周期类中实现 com.codename1.system.URLCallback 接口并实现该shouldApplicationHandleURL
方法。这应该在处理应用链接时调用。
推荐阅读
- python - 编辑使用乘法生成的嵌套列表的值时出现错误
- flutter - Flutter - 在 ListView 顶部添加图层以滚动
- python - 如何使用表单数据在 Robot Framework/Python 中创建发布请求以上传文件和其他键值
- php - 通过来自移动设备的电子邮件验证用户时创建新会话
- sql - 如何在postgres中将唯一行从一个表插入到另一个表?
- flutter - Flutter 应用发布构建挂起调用 getApplicationDocumentsDirectory();
- python - 使用不区分大小写的 Pandas str.contains
- javascript - 任何 babel 插件可以删除不必要的分配?
- php - 缺少页面重定向器 Laravel 实现 Redirector
- microsoft-teams - 在 Microsoft Teams 的 Adaptive Card 中使用 Action.OpenUrl 触发电话(电话或 sip)