【问题标题】:Universal Links iOS通用链接 iOS
【发布时间】:2023-04-03 09:38:02
【问题描述】:

我在让我的应用程序上的通用链接正常工作时遇到了一些麻烦。这是我已经做过的事情。

-- 创建了我的apple-app-site-association 文件。这是我的文件

{

    "applinks": {
                "apps": [],
                "details": [{
                    "appID": "XXXXXXXXXX.com.companyName.app",
                    "paths": ["/view/*", "/class/*"]
                }]
            }
}

我没有签署我的文件,我将我的项目部署目标设置为 iOS 9.2(这样我就不必签署这个文件)。

-- 在我的项目功能中添加了关联域

applinks:companyName.com
applinks:www.companyName.com

-- 在我的开发者门户中也启用了关联域

-- 更新配置文件并使用新的

-- 为构建添加了权利。

-- 重写了这个委托方法

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler

该文件可从我的 HTTPS 服务器获得,我从这个苹果验证器检查了通用链接状态。 https://search.developer.apple.com/appsearch-validation-tool/ 验证器正在验证这一点。但是当我点击 iMessage 中的链接并且链接类似于 companyName.com/view/7375 时,它将在 safari 中打开并且我的应用程序没有收到任何回拨。

知道我错过了什么

【问题讨论】:

    标签: ios objective-c ios9 ios-universal-links itunes-search-api


    【解决方案1】:

    当您支持通用链接时,iOS 9 用户可以点击指向您网站的链接并无缝重定向到您安装的应用程序,而无需通过 Safari。如果您的应用尚未安装,点击指向您网站的链接可在 Safari 中打开您的网站。

    这里,如何设置您自己的服务器,并在您的应用中处理相应的链接。

    转到 Apple 开发者页面

    在 developer.apple.com 上注册您的应用。 在您的应用标识符上启用“关联域”。

    在您的 Xcode 项目中启用“关联域” 像上一步一样,在 developer.apple.com 中的 APP ID 中启用关联域后,“将关联域功能添加到您的 App ID”错误将消失。如果它没有消失,请退出并重新启动 xcode 几次,它就会工作。

    添加正确的域权利并确保在构建时包含权利文件:Xcode 会自动完成。

    然后使用终端创建 apple-app-site-association 文件

    使用此命令创建 AASA(apple-app-site-association) 文件。

    1. cd 桌面

    2. touch apple-app-site-association

    然后打开AASP FILE,写入这个json格式的数据

    {
    "applinks": {
        "apps": [ ],
        "details": [
    
            {
                "appID": "TeamID.BundleID2",
                "paths": [ "*" ]
            }
        ]
    }
    }
    

    准备好 AASA 文件后,您现在可以托管 https://<>/.well-known/apple-app-site-association
    将 apple-app-site-association 文件上传到您的 HTTPS Web 服务器。您可以将文件放在服务器的根目录或 .well-known 子目录中。

    APPLE 应用网站协会 (AASA) 验证者 转到以下链接并输入您的域名。它将检查 AASA 文件是否有效且可访问。 链接:https://branch.io/resources/aasa-validator/#resultsbox

    完成后,在您的 Appdelgate 中添加以下代码

    Swift4

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
        print("Continue User Activity called: ")
        if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
            let url = userActivity.webpageURL!
            print(url.absoluteString)
            //handle url and open whatever page you want to open.
        }
        return true
    }
    

    Objective-c

    -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{
        if ([userActivity.activityType isEqualToString: NSUserActivityTypeBrowsingWeb]) {
            NSURL *url = userActivity.webpageURL;
    
            }
    
        return YES;
    }
    

    然后检查您的授权添加到应用程序目标并运行它将重定向到您的应用程序。确保 AASA 文件将像下面的屏幕一样进行验证,然后将其重定向到您的应用程序。如果有任何遗漏,它不会重定向到您的应用程序。

    在您的服务器内部出现任何内容类型验证错误,然后您可以创建一个 .htaccess 文件并在其中编写此代码。

    <Files "apple-app-site-association">
    ForceType 'application/json'
    </Files>
    

    这个程序在我这边有效。我希望你这边也能正常工作。如果你喜欢阅读这篇文章。

    【讨论】:

      【解决方案2】:

      您还必须实现以下 AppDelegate 函数。

      - (BOOL)application:(UIApplication *)application willContinueUserActivityWithType:(NSString *)userActivityType
      

      我有同样的问题。不幸的是,Apple 没有很好地记录这一点。

      【讨论】:

        【解决方案3】:

        可能是操作系统现在考虑在“覆盖”模式下处理您的 URL——为什么它会进入 Safari。

        当您的应用解析通用链接时,您会在屏幕右上角看到类似“companyName.com -->”的内容。如果您点击它,这就是操作系统“覆盖”处理通用链接的方式,并在当时和永远在 Safari 中打开它。

        尝试返回消息应用并长按链接。一两秒钟后,您应该会看到一个操作表,其中提供了“在 Safari 中打开”和“在“您的应用程序名称”中打开”等选项。选择“以你的名字打开”选项。然后应该“重置”操作系统视图处理您的通用链接的方式,现在将它们引导回您的应用程序。

        【讨论】:

        • 嗨,谢谢它在 iPhone 上工作,但我正在使用笔记应用程序打开 iPad pro 上的链接,当我长按链接时它没有给我在应用程序中打开的选项。任何想法为什么
        • 首先,很高兴它成功了。其次,关于Notes,我不知道。我的印象是“长按 -> 操作表 -> 打开选项”取决于应用程序及其开发人员添加的任何支持。 :-( 这是我希望 Apple 在记录方面做得更好的事情:问题,如何解决它,如何“撤消”它,我们的开发人员如何能够撤消它(并提供支持,即使只是作为常见问题解答,给我们的用户等)。:-(
        猜你喜欢
        • 2021-09-11
        • 1970-01-01
        • 1970-01-01
        • 2018-05-12
        • 2016-05-15
        • 1970-01-01
        • 2022-09-29
        • 2018-08-01
        • 2016-01-17
        相关资源
        最近更新 更多