首页 > 解决方案 > 带有自定义域的 Firebase 动态链接

问题描述

我在多个 iOS 应用程序中集成了 Firebase 动态链接,这些应用程序位于同一个 firebase 项目中,并且运行良好。但是当我在同一台设备上安装这两个应用程序时,动态链接没有打开设备上的特定应用程序。因此,我在根目录中使用自定义 apple-app-site-association 向 firebase 注册了一个自定义子域。但我仍然有同样的问题。我想生成简短的动态链接,例如

https://apps.mybrand.co.id/partner/xXXx

公共文件夹中的文件

在此处输入图像描述

苹果应用网站关联

{
        "applinks": {
            "apps": [],
            "details": [
                {
                    "appID": "XXXXX.com.XXXX.Customer",
                    "paths":[ "/customer/", "/brand/"]
                },
                {
                    "appID": "XXXXX.com.XXXX.Partner",
                    "paths": ["/partner/"]
                }
            ]
        }
    }

Firebase.json

{
    "hosting": {
        "public": "public",
        "ignore": [
            "firebase.json",
            "**/.*",
            "**/node_modules/**"
        ],
        "appAssociation": "AUTO",
        "rewrites": [
            {
                "source": "/**",
                "dynamicLinks": true
            }
        ],
        "headers": [
            {
                "source": "apple-app-site-association",
                "headers": [{"key": "Content-Type", "value": "application/json"}]
            }
        ]
    }
}

我正在使用以下代码生成链接

//在 firebase 上注册的自定义域 let dynamicLink = "apps.mybrand.co.id"

    //create link url components
    var urlComponents = URLComponents()
    urlComponents.scheme = "https"
    urlComponents.host = dynamicLink
    urlComponents.path = "/data"
    let queryItem = URLQueryItem(name: "myBrandReferCode", value: "60C38A")
    urlComponents.queryItems = [queryItem]

    // get the url from url component
    guard let linkParameter = urlComponents.url else {
        return
    }
    //print the url string for debugging
    print("I am sharing \(linkParameter.absoluteString)")

    // create dynamic link components with custom domain
    guard let shareLink = DynamicLinkComponents.init(link: linkParameter, domainURIPrefix: "https://apps.mybrand.co.id/partner") else {
        print("Unable to create FDL component.")
        return
    }

    shareLink.iOSParameters = DynamicLinkIOSParameters(bundleID: "com.ranosys.DFM-BM")
    //temporary app id of another app, same in firebase console app settings
    shareLink.iOSParameters?.appStoreID = "359085099"

    //call shorten method to get short dynamic link
    shareLink.shorten { (shortURL, warnings, error) in

        for warning in warnings ?? [String]() {
            print(warning)
        }

        //remove wait view from the button
        self.shareCodeButton.removeWaitView()
        //if there is any error, print it
        if let error = error {
            print(error.localizedDescription)
            return
        }
        //if dynamic link is successfully shortened
        if let shortLink = shortURL {
            //show the activity controller
            self.showActivityCoontroller(shortLink)
        }
    }

但我收到错误The operation couldn’t be completed. Your project does not own Dynamic Links domain: https://apps.mybrand.co.id

标签: iosswiftfirebase-dynamic-links

解决方案


不确定这是否会帮助任何人,但我有类似的问题。我想设置我自己的域以用作无密码身份验证的动态链接,而不是您可以默认使用的 appname.page.link 动态链接域。相反,我想使用 myowndomain.com/DynamicLinks。

要以这种方式将动态链接与 Firebase 一起使用,您必须将域的控制权授予 Firebase,然后 Firebase 会在域的根目录中为您生成 JSON apple-app-site-association 文件。如果您想在此域上托管页面,您将需要使用 firebase 托管。换句话说,要使域使用与 Firebase 的动态链接,该域必须由 Firebase 控制,方法是创建必要的关联 DNS 记录以指向其服务器。

最好创建一个指向 Firebase 的子域,这样您就可以将自己的主机用于您的主域。即 yourdomain.com -> 定向到您的服务器主机 dynamiclinkssubdomain.yourdomain.com -> 定向到 Firebase

确保您在项目设置下正确设置了正确的 AppID、BundleID、StoreID 和 TeamID。

但是这就是我感到沮丧的地方:我按预期做了所有事情,但仍然没有用。我联系了 Apple 支持,他们说 apple-app-site-association 需要时间来传播。原来它花了大约36个小时。现在完美运行。还发现该文件是在根目录中创建的,因此您的 actionCodeSettings.dynamicLinkDomain 需要指向根目录,而不是您配置的动态链接前缀目录。

希望这可以帮助某人。花了大约 4 天时间找出动态链接!


推荐阅读