繁体   English   中英

如何使用 React Native Firebase 动态链接获取 iOS 的初始链接?

[英]How to get initial link for iOS using react native firebase dynamic links?

我正在使用 react-native-firebase::5.6.0,在获取 iOS 设备的初始链接时遇到问题。 在android上它工作正常。 我正在使用“Firebase 动态链接”在我的应用程序的登录屏幕内重定向用户,如果他没有在应用程序内部登录,否则如果他已经登录,则只打开应用程序。它适用于 android 应用程序,但有 ios 问题应用程序。 我使用了两个功能,一个是在应用程序关闭时获取动态链接“getInitialLink”,另一个是检查应用程序何时打开“onLink”。

这是我在关闭闪屏后使用的功能,仅在从关闭状态打开应用程序时调用一次。

firebase.links().getInitialLink().then((url) => {
    if (url && url === 'https://mycustomdomain.co.in') {
        navigationToScreen(AUTH, INITIAL_SCREEN);
    } else {
        // INITIALIZE APP HERE
    }
});

如果应用程序已经打开,我将在此函数中获取动态链接 url 值::

this.unsubscribeHandleOpenAppDynamicLinks = firebase.links().onLink(async (url) => {
    let isLoggedIn = await AsyncStorage.getItem(LocalStorageKeys.IS_LOGGEDIN);
    if (url) {
        if ( isLoggedIn !== 'yes' && url === 'https://mycustomdomain.co.in') {
            navigationToScreen(AUTH, INITIAL_SCREEN);
        }
    }
});


and clearing that listener on componentWillUnmount:: this.unsubscribeHandleOpenAppDynamicLinks();

在 iOS 的情况下,只有“onLink”函数在工作,我得到的 url 值为“undefined”。 getInitialLink() 函数将返回启动应用程序的 URL。 如果应用程序不是从 URL 启动的,则返回值将为空,但即使在仅适用于 iOS 的情况下从 url 启动应用程序时,我也会收到“未定义”。 在 iOS 的情况下,当应用程序启动时,我在 onLink() 中获取 url。 为什么会这样??

请建议我在这里做错了什么。

如果getInitialLink方法不起作用,要么是因为链接不当,要么是由于 Expo 运行时。 或者,使用Linking.getInitialURL方法获取初始 URL。 这也需要一点本机代码。 这是因为链接模块不知道如何解释缩短的 URL。 因此,我们调用 Firebase SDK 的resolveShortLink方法来获取嵌入的深层链接。 一旦我们收到嵌入的深层链接,我们就可以在我们的应用程序中照常处理它。

本机源代码记录在本文中 但为了完整起见,我会在这里发布。

#import "FDLResolver.h"
#import <React/RCTLog.h>

@implementation FDLResolver

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(resolveShortLink:(NSString *)shortLink :(RCTPromiseResolveBlock)resolve
    :(RCTPromiseRejectBlock)reject)
{
    id completion = ^(NSURL *_Nullable dynamicLink, NSError *_Nullable error) {
      if (!error && dynamicLink) {
        resolve(dynamicLink.absoluteString);
      } else {
          reject(@"Error", @"Error in getting dynamic link", error);
      }
    };

    NSURL *shortLinkURL = [NSURL URLWithString:shortLink];
    [[FIRDynamicLinks dynamicLinks] resolveShortLink:shortLinkURL completion:completion];
}

@end

链接模块代码如下。

Linking.getInitialURL().then(url => {
  if (url && url.includes('page.link')) {
    const shortLink = url.replace('exps', 'https')
    NativeModules.FDLResolver.resolveShortLink(shortLink)
      .then(link => {
        const linkParts = link.split('?')
        const query = qs.parse(linkParts[1])
        this.parseRouteUrl(query.deep_link_id)
      })
  }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM