如何将 React 本机导航与 Android 中的 AWS Amplify 推送通知集成?
Posted
技术标签:
【中文标题】如何将 React 本机导航与 Android 中的 AWS Amplify 推送通知集成?【英文标题】:How to integrate React native navigation with AWS Amplify push notifications in android? 【发布时间】:2019-06-24 10:36:42 【问题描述】:我正在尝试使用 react-native-notification 库和 aws-amplify 让 FCM 推送通知在我的 android 反应原生项目中工作。我有一个问题,PushNotification.onRegister 方法没有在 android 中调用来获取设备令牌来发送远程通知。如何让这两个库在我的 react native 项目中一起工作?
我关注了 aws-amplify 文档https://aws-amplify.github.io/docs/js/start?ref=amplify-rn-btn&platform=react-native 在反应原生项目中包含放大库。 然后我添加了根据https://aws-amplify.github.io/docs/js/push-notifications 设置的推送通知 我已经包含了 react-native-navigation 库,以根据我的 react-native 应用程序支持导航 https://wix.github.io/react-native-navigation/#/docs/Installing 安装后 react-native 导航库 pushNotification.onRegister 方法没有被调用来接收设备令牌,没有它我无法在 android 中发送推送通知。
我在 App.js 中配置了推送通知,如下所示
import PushNotification from '@aws-amplify/pushnotification';
import Analytics from '@aws-amplify/analytics';
import Auth from '@aws-amplify/auth';
// retrieve temporary AWS credentials and sign requests
Auth.configure(awsconfig);
// send analytics events to Amazon Pinpoint
Analytics.configure(awsconfig);
console.log(PushNotification);
PushNotification.configure(awsconfig);
然后在 App.js 的构造函数中注册 PushNotification 事件。
Navigation.events().registerAppLaunchedListener(() =>
PushNotification.onNotification((notification) =>
// Note that the notification object structure is different from Android and ios
console.log('in app notification', notification);
// required on iOS only (see fetchCompletionHandler docs: https://facebook.github.io/react-native/docs/pushnotificationios.html)
notification.finish(PushNotificationIOS.FetchResult.NoData);
);
// get the registration token
PushNotification.onRegister((token) =>
Alert.alert(token);
this.setState(token:token);
console.log('in app registration', token);
);
// get the notification data when notification is opened
PushNotification.onNotificationOpened((notification) =>
console.log('the notification is opened', notification);
);
);
如果我不包含 react-native-navigation 库,此设置工作正常,并且会调用 PushNotification.onRegister 事件并打印设备令牌。 在 iOS 中,我可以使用 react-native-navigation 库获取设备令牌,但在 android 中它不起作用。任何关于这个问题的指针将不胜感激!
【问题讨论】:
【参考方案1】:请看这里:https://github.com/aws-amplify/amplify-js/issues/2541#issuecomment-455245033
Android 应用只调用一次.onRegister()
,此时应用/设备是全新的。之后的调用似乎是从缓存中加载的。
【讨论】:
是的,我已经在一个独立的 react native 项目中尝试过,并且我能够在 android 中接收通知,但是我使用 Wix 的 React Native Navigation 库在 React Native App 中进行导航,并使用这个它似乎正在中断并且 onRegister 永远不会被调用。您可以通过在 React Native 放大项目中添加 react-native-navigation 来重现此问题以上是关于如何将 React 本机导航与 Android 中的 AWS Amplify 推送通知集成?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 上触摸通知时如何导航到特定的 React 组件?