ios - 带有自定义域的 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
解决方案
不确定这是否会帮助任何人,但我有类似的问题。我想设置我自己的域以用作无密码身份验证的动态链接,而不是您可以默认使用的 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 天时间找出动态链接!
推荐阅读
- laravel - 如何修复使用 Vue Apollo 的应用程序中的零星错误?
- bash - 如何从命令行下载带有 Chrome Headless 的网站?
- excel - 具有可变范围的 CountIfs
- maven - 我应该如何将一个android库放到网上
- angular - 如何区分类型和功能?
- ios - HERE Api - 使用 iOS/Android SDK 和 REST API 的不同路由结果
- java - 如何将文本字段中一次可见的字符数限制为小于文本字段的宽度?
- anypoint-studio - 在 Anypoint Studio 中看不到连接器的属性
- java - 如何使项目兼容 64 位
- python - 如何从字符串中删除 None 类型