我有一个 React Native 应用程序,它可以在 safari 中打开 Oauth 登录门户:
const handleLogin = () => {
Linking.canOpenURL('myappname://myapproute').then((supported) => {
if (supported) {
console.log('can open url');
Linking.openURL(myurl);
} else {
console.log("Don't know how to open URI: " + 'myappname:myapproute');
}
});
};
在
myurl
内部,我还提供了一个重定向URI,myappname://myapproute
。
在 Oauth 中授权后,有一个按钮可以返回我的应用程序。正常的 iOS 弹出窗口“在“myappname”中打开此页面?”显示,单击时重定向回我的应用程序。
我需要监听打开我的应用程序的回调,并提取可能已提供的相关参数。为此,我注册了一个事件监听器:
useEffect(() => {
const handleOpenURL = (event) => {
console.log(`event is: ${event}`);
};
Linking.addEventListener('url', handleOpenURL);
return () => {
Linking.removeEventListener('url', handleOpenURL);
};
}, []);
但是,尽管我的应用程序已打开,但我的处理程序从未运行。我可能做错了什么?我确保我的听众已注册。只有一次我能够查看提取的参数,但那是在摆弄应用程序时,我无法复制它。
如果您使用反应导航,您可以通过定义 NavigationContainer 链接属性来使用不同的方法
const config = {
screens: {
Home: {
screens: {
Login: 'users/:token',
},
},
},
};