我正在使用 react-native-firebase:: 5.6.0,我在获取 iOS 设备的初始链接时遇到问题。在安卓上,它工作正常。我正在使用"Firebase动态链接"将用户重定向到我的应用的登录屏幕内(如果他没有在应用内登录(,否则如果他已经登录,则只需打开应用。 它适用于安卓应用程序,但 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 值为"未定义"。 getInitialLink(( 函数将 返回已从中启动应用的 URL。如果应用是 不是从 URL 启动的,返回值将为空,但我是 即使在iOS的情况下从URL启动应用程序时也变得"未定义" 只。我在 onLink(( 中获取网址,如果是 iOS,当应用程序是 推出。为什么会这样??
请建议我在这里做错了什么。
如果getInitialLink
方法不起作用,则可能是因为链接不正确或由于世博会运行时。或者,使用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)
})
}
})