[英]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.