Linking.addEventListener 无法在 React Native 中工作
Linking.addEventListener not working in react native
我已经成功实现了一个通用 link,它可以在我的应用程序中打开一个特定页面(如果该应用程序已关闭)。问题是,如果应用程序在后台 运行,则不会调用 eventListener。这是代码:
import {Linking} from 'react-native';
export default class App extends React.Component {
async componentDidMount(){
Linking.addEventListener('url', this._handleOpenURL);
let url = await Linking.getInitialURL();
if (url) {
console.log('MOUNT GET INIT URL','initial url ' + url);
}
}
_handleOpenURL = (event) => {
console.log("in _handleOpenURL", event.url)
}
}
MOUNT GET INIT URL
已成功登录到控制台。 in _handleOpenURL
从未被记录。网上好像也有人遇到过这个问题,但是没有人回答。有人知道怎么办吗?
在 appdelegate.m 中的最后一个 @end
之前添加:
// iOS 9.x or newer
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}
我已经成功实现了一个通用 link,它可以在我的应用程序中打开一个特定页面(如果该应用程序已关闭)。问题是,如果应用程序在后台 运行,则不会调用 eventListener。这是代码:
import {Linking} from 'react-native';
export default class App extends React.Component {
async componentDidMount(){
Linking.addEventListener('url', this._handleOpenURL);
let url = await Linking.getInitialURL();
if (url) {
console.log('MOUNT GET INIT URL','initial url ' + url);
}
}
_handleOpenURL = (event) => {
console.log("in _handleOpenURL", event.url)
}
}
MOUNT GET INIT URL
已成功登录到控制台。 in _handleOpenURL
从未被记录。网上好像也有人遇到过这个问题,但是没有人回答。有人知道怎么办吗?
在 appdelegate.m 中的最后一个 @end
之前添加:
// iOS 9.x or newer
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
return [RCTLinkingManager application:application openURL:url options:options];
}
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
return [RCTLinkingManager application:application
continueUserActivity:userActivity
restorationHandler:restorationHandler];
}