簡體   English   中英

Firebase iOS/React Native 上的動態鏈接僅在應用程序運行時有效

[英]Firebase Dynamic Links on iOS/React Native only working when app is running

我正在使用Firebase 的動態鏈接(8.11.0) 打開具有特定 URL 的 React Native (0.66.4) 應用程序。

在我的AppDelegate.m文件中,我以這種方式處理 URL:

- (BOOL)application:(UIApplication *)application
continueUserActivity:(nonnull NSUserActivity *)userActivity
 restorationHandler:
#if defined(__IPHONE_12_0) && (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_12_0)
(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> *_Nullable))restorationHandler {
#else
  (nonnull void (^)(NSArray *_Nullable))restorationHandler {
#endif  // __IPHONE_12_0
        FIRDynamicLink *dynamicLink = [[FIRDynamicLinks dynamicLinks] dynamicLinkFromCustomSchemeURL:userActivity.webpageURL];
    
        if (dynamicLink) {
          if (dynamicLink.url) {
            NSLog(@"dynamicLink.url %@", dynamicLink.url);
            return [RCTLinkingManager application:application openURL:dynamicLink.url options:[NSMutableDictionary dictionary]];
          }
        }
    
        return [[FIRDynamicLinks dynamicLinks] handleUniversalLink:userActivity.webpageURL
                                                 completion:^(FIRDynamicLink * _Nullable dynamicLink, NSError * _Nullable error) {
          if (error) {
            NSLog(@" dynamicLink.url ERROR %@", error);
          }
          if (dynamicLink) {
            if (dynamicLink.url) {
              NSLog(@" dynamicLink.url %@", dynamicLink.url);
              // ******** This line is executed as expected in both cases *******
              [RCTLinkingManager application:application openURL:dynamicLink.url options:[NSMutableDictionary dictionary]];
            } else {
              [RCTLinkingManager application:application openURL:userActivity.webpageURL options:[NSMutableDictionary dictionary]];
            }
          } else {
            [RCTLinkingManager application:application openURL:userActivity.webpageURL options:[NSMutableDictionary dictionary]];
          }
        }];
  }

我的Info.plist文件指定了我的自定義域:

<key>FirebaseDynamicLinksCustomDomains</key>
<array>
  <string>https://join.mysite.app</string>
</array>

我的關聯域指定

applinks:join.mysite.app

有了這個,我的 React Native 代碼,通過Linking.getInitalURL()正在接收我期望的link在此處指定),但前提是當單擊短鏈接時應用程序已經在運行

當我的應用程序運行時,將執行上面注釋中提到的相同代碼,具有我期望的相同輸入和輸出,但Linking.getInitalURL()調用給我的是短鏈接,而不是傳遞的解析鏈接到RCTLinkingManager

我希望使用相同的代碼路徑/數據,行為將是相同的,但只有當應用程序已經運行時它才是正確的。 我錯過了一步嗎?

從示例中,您分享了您只實現了continueUserActivity方法,該方法在應用程序已經打開時攔截鏈接。

您還需要實現openURL方法,如他們的文檔狀態here

最后,我強烈建議使用與 react-native 一起使用的已構建

如果你真的堅持自己構建這個功能,至少你可以在這里查看他們的源代碼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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