[英]Firebase Dynamic-Links is not working for different target in same project in iOS
Android 和 iOS 的 Firebase 動態鏈接的行為是否不同? 如何為 iOS 中的不同目標實現同一項目的 Firebase 動態鏈接?
在 Android 中,Firebase 動態鏈接適用於不同的風格,但在 iOS 中,Firebase 動態鏈接不適用於不同的目標。
對於 iOS,對於具有不同目標的同一項目,我必須為 Firebase Dynamic-Links with Firebase 實施什么?
Android 和 iOS 的 Firebase 動態鏈接行為不同的實際原因是什么? 要為不同的目標實施 Firebase 動態鏈接,我是否必須為同一個應用程序創建一個單獨的項目?
Firebase 動態鏈接不支持對包含在同一 Firebase 項目中的多個 iOS 應用/目標使用相同的網址前綴。 不過有多種解決方法:
如果每個 iOS 應用程序都使用自己的(子)域進行動態鏈接,則它會起作用。 例如,不要將pets.page.link
用於所有目標, cats.page.link
將cats.page.link
用於您的第一個應用程序目標,並將dogs.page.link
用於您的第二個應用程序目標。 對此的關鍵要求是您的目標的每個Associated Domains Entitlement
僅包含它應該偵聽的(子)域。
就我個人而言,我正在使用這個解決方案,它工作得很好。
如果您堅持對所有目標使用相同的域,您應該能夠通過使用自定義域以及一些額外的工作來解決這個問題。
按照 官方文檔設置像my-own-fancy-pet-app.com
這樣的自定義域,而不是使用 Firebase 本機提供的任何 URL 前綴(如pets.page.link
)。
創建firebase.json
文件時,不要使用建議的"appAssociation": "AUTO",
選項,而是將其設置為NONE
。 這將阻止 Firebase 自動創建有問題的apple-app-site-association
文件(以及assetlinks.json
)。 改用 Firebase 托管來提供手動創建的版本。 然后,您可以使用apple-app-site-association
將其配置為您的需要,即僅將特定路徑重定向到每個目標,而不是將所有路徑匹配到所有目標。
免責聲明:我還沒有測試過這種方法,因為在我的情況下它不值得額外的工作。
當然,您可以簡單地為每個目標創建一個新的 Firebase 項目。 您不能在多個項目中使用相同的(子)域,因此您被迫隱式實施解決方案 1。
在 Android 上,所需的assetlinks.json
文件映射完整域,包括指向 Android 應用程序(或風格)列表的所有路徑。 特定應用程序是否支持特定鏈接由您通過在 Android 清單文件中本地路由所需路徑來確定。
在 iOS 上,情況正好相反:所需的apple-app-site-association
文件確定哪些路徑與哪些應用程序匹配。 不幸的是,當使用 Firebase 動態鏈接時,您不負責此文件,Firebase 只是將 URL 的所有路徑與 Firebase 項目中包含的所有應用程序進行匹配。 在本地,您只能配置 iOS 應用程序的Associated Domains Entitlement
。 然而,后者只處理包括所有路徑的完整域。
不幸的是,官方文檔中沒有提到這個限制。 然而,它已經被證實,例如這里或這里。 如第一個鏈接中所述,他們曾經計划添加此功能,但看起來他們仍然沒有。 我會聯系支持人員要求更新並要求他們至少向文檔添加適當的提示。
PS:我知道這是一個很老的問題,在問的時候情況可能有點不同。 盡管如此,今天仍然是一個問題。
@VishalPatoliyaツ 我向 Firebase 開發人員詢問了這件事,他們說這個功能不在他們的待辦事項列表中)並提議提出請求以支持為什么需要這種可能性。 也許它有時會實施......
...雖然通用鏈接有多個應用程序支持。 在這里您可以了解它是如何工作的: 在支持通用鏈接的兩個不同應用程序上支持同一個域..?
對於深層鏈接,您將使用應用程序的包標識符。 您的其他目標將具有不同的標識符。 在 Info.plist 中使用 UIApplicationShortcutItems 並在相應的 plist 文件中為您的深層鏈接襯衫剪裁添加條目。
如果您希望它們獲得不同的應用程序域,則需要在 Firebase 中為每個目標創建一個不同的項目。 如果不這樣做,則無法通過 iOS 的通用鏈接系統區分它們。
這意味着您不能創建包含多個應用程序的單個項目。
通過覆蓋默認的apple-app-site-association
可以使用相同的 自定義域。
在firebase.json
中設置 http 標頭。
{
"hosting": {
"appAssociation": "AUTO",
"public": "public",
"ignore": ["firebase.json"],
"rewrites": [{ "source": "/**", "dynamicLinks": true }],
"headers": [
{
"source": "/.well-known/apple-app-site-association",
"headers": [{ "key": "Content-Type", "value": "application/json" }]
},
{
"source": "/apple-app-site-association",
"headers": [{ "key": "Content-Type", "value": "application/json" }]
}
]
}
}
創建public/apple-app-site-association
(上面的配置假定文件將在public
文件夾中;根據需要進行修改)。 isi
是 Apple Store 數字應用程序 ID。
{
"applinks": {
"details": [
{
"appIDs": ["ABCDEF1234.com.example.foo"],
"components": [{ "?": { "isi": "112233" } }]
},
{
"appIDs": ["ABCDEF1234.com.example.bar"],
"components": [{ "?": { "isi": "445566" } }]
}
]
}
}
創建指向public/apple-app-site-association
符號鏈接public/.well-known/apple-app-site-association
-site-association (或只是復制文件)。
使用 firebase cli firebase deploy --only hosting
進行部署。 可能會立即在開發中工作,但 Apple 警告緩存可能會導致這需要一周的生產時間。
上面的配置假設 手動構建動態鏈接。 使用干凈的鏈接需要不同的模式匹配器。 例如,如果https://apps.example.com/foo/clean-link
應該啟動com.example.foo
並且https://apps.example.com/bar/clean-link
應該啟動com.example.bar
,分別添加到"components"
數組{ "/": "/foo/*" }
和{ "/": "/bar/*" }
。 這些技術可以結合起來支持這兩個用例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.