如何将 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中的反应导航

在 Android 上触摸通知时如何导航到特定的 React 组件?

世博会反应本机导航的问题

如果用户在由本机生成的应用程序上隐藏了较低的硬件导航栏,则Android屏幕不适合

在React本机页面之间传递数据

从本机事件发射器回调后,React 本机 UI 未呈现。甚至回调有状态改变