簡體   English   中英

Firebase 動態鏈接不適用於 iOS 中同一項目中的不同目標

[英]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 動態鏈接,我是否必須為同一個應用程序創建一個單獨的項目?

TLDR

Firebase 動態鏈接不支持對包含在同一 Firebase 項目中的多個 iOS 應用/目標使用相同的網址前綴。 不過有多種解決方法:


解決方案 1:使用多個(子)域

如果每個 iOS 應用程序都使用自己的(子)域進行動態鏈接,則它會起作用。 例如,不要將pets.page.link用於所有目標, cats.page.linkcats.page.link用於您的第一個應用程序目標,並將dogs.page.link用於您的第二個應用程序目標。 對此的關鍵要求是您的目標的每個Associated Domains Entitlement僅包含它應該偵聽的(子)域。

就我個人而言,我正在使用這個解決方案,它工作得很好。

解決方案 2:使用自定義域

如果您堅持對所有目標使用相同的域,您應該能夠通過使用自定義域以及一些額外的工作來解決這個問題。

按照 官方文檔設置像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將其配置為您的需要,即僅將特定路徑重定向到每個目標,而不是將所有路徑匹配到所有目標。

免責聲明:我還沒有測試過這種方法,因為在我的情況下它不值得額外的工作。

解決方案 3:使用多個 Firebase 項目

當然,您可以簡單地為每個目標創建一個新的 Firebase 項目。 您不能在多個項目中使用相同的(子)域,因此您被迫隱式實施解決方案 1。


背景

為什么它適用於 Android 而不適用於 iOS?

在 Android 上,所需的assetlinks.json文件映射完整域,包括指向 Android 應用程序(或風格)列表的所有路徑。 特定應用程序是否支持特定鏈接由通過在 Android 清單文件中本地路由所需路徑來確定。

在 iOS 上,情況正好相反:所需的apple-app-site-association文件確定哪些路徑與哪些應用程序匹配。 不幸的是,當使用 Firebase 動態鏈接時,您不負責此文件,Firebase 只是將 URL 的所有路徑與 Firebase 項目中包含的所有應用程序進行匹配。 在本地,您只能配置 iOS 應用程序的Associated Domains Entitlement 然而,后者只處理包括所有路徑的完整域。

Firebase 動態鏈接限制

不幸的是,官方文檔中沒有提到這個限制。 然而,它已經被證實,例如這里這里 如第一個鏈接中所述,他們曾經計划添加此功能,但看起來他們仍然沒有。 我會聯系支持人員要求更新並要求他們至少向文檔添加適當的提示。


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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM