iOS 通用链接在 react-native iOS 中不起作用

Posted

技术标签:

【中文标题】iOS 通用链接在 react-native iOS 中不起作用【英文标题】:iOS Universal link not working in react-native iOS 【发布时间】:2021-09-07 12:58:30 【问题描述】:

您好,我知道之前有人问过这个问题,但我仍然无法弄清楚做错了什么。

    在我们服务器的https://ourserver.com/.well-known/apple-app-site-association下添加了apple-app-site-association文件 文件内容如下

`


   "applinks":
      "apps":[],
      "details":[
         
            "appID":"<teamId>.<bundleId>",
            "paths":[ "*",  "/" ]
         
      ]
   

` 3. 关联域作为能力添加

 applinks:servername.com
 applinks:dev.servername.com

    在 AppDeletegate.m 中添加代码

    - (BOOL)application:(UIApplication *)application
     openURL:(NSURL *)url
     options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
    
      return [RCTLinkingManager application:application openURL:url options:options];
     
    
    
    - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
     restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
    
     return [RCTLinkingManager application:application
                  continueUserActivity:userActivity
                    restorationHandler:restorationHandler];
    
    

编辑 1

注意到我在 ios 版本 12.4.2 iPhone 中尝试了通用链接并且重定向正确。在 iOS 版本 14 中,它重定向到我们的网页。所以我更新了我的 apple-app-site-association 文件如下


   "applinks": 
      "details": [
         
            "appIDs": [
               "teamid.bundleid"
            ],
            "components": [
               
                  "/": "/*",
                  "comment": "Matches any URL whose path starts with URL_PATH and instructs the system not to open it as a universal link"
               ,
               
                  "/": "*",
                  "comment": "Matches any URL whose path starts with URL_PATH and instructs the system not to open it as a universal link"
               
            ],
            "paths": [
               "*",
               "/"
            ]
         
      ]
   

oru 网址在 this link 中验证

所有测试均在真实设备中完成。

编辑 2

以下所有内容均在模拟器中测试 - iPhone 11 Pro iOS 14.4

    在具有开发者模式的模拟器中进行了相同的测试

    applinks:servername.com?mode=developer applinks:dev.servername.com?mode=developer

它在 SIMUALTOR 中正确打开

    然后我拼错了我们的服务器名称并从 iMessages 中单击它重定向到 SIMULATOR 中的 Safari -

    清除 Safari 历史记录和缓存后,我再次尝试使用正确的服务器名称 - 仍然重定向到浏览器而不是应用程序

编辑 3

在模拟器上

浏览此link 并看到有关 Smart App 的横幅,因为我找不到类似的东西。搜索后找到了这个SO Post 并尝试了设置-Safari-高级-网站数据-页面中显示了我的域名-清除网站数据。 在模拟器上再次尝试,应用程序正确打开

在 iPhone 上发布临时构建

在真实设备上做了同样的设置 - Safari - 高级 - 网站数据 - 在页面中显示了我的域名 - 清除网站数据,但它不起作用。它仍然在应用程序中打开浏览器

编辑 4

EDIT 2 中的 AASA 文件在 iOS 版本 12.4.2 中导致重定向失败。因此像这样更新它


   "applinks":
      "apps":[
         
      ],
      "details":[
         
            "appID":"teamid.bundleid",
            "paths":[
               "*",
               "/"
            ],
            "appIDs":[
               "teamed.bundleid"
            ],
            "components":[
               
                  "/":"/*"
               ,
               
                  "/":"*"
               
            ]
         
      ]
   

更新到此重定向到版本 12.4.2 中的应用程序但在 14 及更高版本中失败。经过这个link

后修改了AASA文件

感谢任何帮助

提前致谢

【问题讨论】:

你有没有得到这个工作?我想知道问题是否是 Apple 的 CDN 没有获取您修改后的 AASA 文件。我还没有找到任何关于如何通知 CDN 更改的指南/文档。 不,它仍然有问题。一旦我弄清楚问题将在此处发布更新。 您解决了吗? @ZubairAhmed 没有人。 【参考方案1】:

我遇到了同样的问题,看到上面@suja 还没有解决,所以我想在这里发布答案。

首先我们需要仔细检查我们的&lt;teamID&gt;.&lt;bundleID&gt; 模式。因为如果我们的关联文件不能识别它,如果它是错误的(即使我们正确地完成了所有其他步骤)。

我找到了这个有用的官方链接和saw this video carefully。另外,视频幻灯片可以是seen here in PDF

其实他们已经更新了关联文件的内容,比如

    appID: string_value 键现在变成 appIDs: array_of_strings paths 键现已替换为 components 如果您想在开发期间在模拟器中进行测试,那么您应该在 XCode 的关联域功能中匹配 URL 的末尾使用查询参数 mode=developer。 您不能使用http://(例如,如果您使用localhost:PORT 在本地启动您的网站,那么您应该使用一些外部服务来使您的本地主机可用作公共链接)。就我而言,我确实使用 ngrok 将我的 localhost 模拟为 https://,如果从您的网页调用 Web 服务 (API),也不要忘记在 CORS 策略中允许该 ngrok URL。 apple-app-site-association 必须位于您网站的公共文件夹中,位于子目录 .well-known

现在合并所有步骤。从昨天开始我就遇到了同样的问题,然后我从 Apple 官方网站找到了上述链接来完成这项工作并了解通用链接的工作原理。

最重要的是,如果您在模拟器上进行测试,那么请确保您的Apple developer Account 中您的开发appID.bundleID 应该在关联文件中准确无误。

以下是以我的关联文件为例


    "applinks": 
        "details": [
            
                "appIDs": [
                    "YOUR_PRODUCTION_TEAM_ID.com.yourapp_bundleID",
                    "YOUR_DEV_TEAM_ID.com.yourapp_bundleID.dev"
                ],
                "components": [
                    
                        "/": "*",
                        "comment": "Matches any URLs"
                    
                ]
            
        ]
    

对于生产,不要忘记在关联域功能中添加生产 URL,以及在 apple-app-site-association 文件中添加 PROD_appID.PROD_bundleID。记住这个文件应该可以被苹果访问

https://your-web.com/.well-known/apple-app-site-association

就是这样,为了进一步了解查询参数和动态路径,我建议查看上面的 PDF 链接,尤其是 Apple 官方网站上的视频!

【讨论】:

【参考方案2】:

尝试在您的 aasa 文件中将“appID”:“.bundleid”替换为“appID”:“.bundleid”。

【讨论】:

以上是关于iOS 通用链接在 react-native iOS 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 react-native 在 iOs 上处理同一个应用程序的多个环境的深层链接

Agora.io React-native 课堂和白板集成

链接lottie-ios后编译出错

react-native iOS存档失败

iOS Universal Links(通用链接)

iOS 9学习系列:打通 iOS 9 的通用链接(Universal Links)