0

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

-- 创建了我的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 中打开,并且我的应用程序没有收到任何回叫。

知道我错过了什么

4

3 回答 3

1

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

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

Go Apple 开发者页面

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

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

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

在此处输入图像描述

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

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

  1. 光盘桌面

  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 APP SITE ASSOCIATION (AASA) VALIDATOR 转到以下链接并输入您的域名。它将检查 AASA 文件是否有效且可访问。链接:https ://branch.io/resources/aasa-validator/#resultsbox

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

斯威夫特4

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
}

目标-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>

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

于 2019-12-12T12:56:03.073 回答
1

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

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

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

于 2016-03-23T12:21:51.003 回答
0

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

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

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

于 2017-11-24T09:31:30.013 回答