iOS 通用链接在本机 iOS 中不起作用

问题描述 投票:0回答:3

嗨,我知道之前有人问过这个问题,但我仍然不知道做错了什么。

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

`

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

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

 applinks:servername.com
 applinks:dev.servername.com
  1. 在 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 网址已在 此链接

中验证

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

编辑2

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

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

    applinks:servername.com?mode=开发者 应用链接:dev.servername.com?mode=developer

它在SIMUALTOR中正确打开

  1. 然后我拼错了我们的服务器名称,并从 iMessages 中单击它,它在模拟器中重定向到 Safari -

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

编辑3

在模拟器上

浏览了这个链接并看到了智能应用程序横幅,因为我找不到类似的东西。搜索后发现这个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 及更高版本中会失败。通过此链接

后修改了AASA文件

感谢任何帮助

提前致谢

ios react-native deep-linking ios-universal-links universal-link
3个回答
2
投票

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

首先我们需要仔细检查我们的

<teamID>.<bundleID>
模式。因为如果我们的关联文件无法识别它,如果它是错误的(即使我们正确地完成了所有其他步骤)。

我找到了这个有用的官方链接并仔细看了这个视频。此外,视频幻灯片可以在此处以 PDF 形式查看

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

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

现在结合所有步骤。从昨天开始我就遇到了同样的问题,然后我从苹果官方网站找到了上述链接来完成此操作并了解通用链接到底是如何工作的。

最重要的是,如果您在模拟器上进行测试,请确保您的Apple开发者帐户中的开发

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,以及在

PROD_appID.PROD_bundleID
文件中添加
apple-app-site-association
。请记住,苹果应该可以访问此文件:

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

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


0
投票

我面临同样的错误! 有人解决这个问题吗


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.