2

我已经实现了推送通知,react-native-push-nofication这里是我的推送通知配置。

const configure = () => {

 var _token

 PushNotification.configure({

   onRegister: function(token) {
     //process token

     //alert(JSON.stringify(token));
     Clipboard.setString(JSON.stringify(token))
   },

   onNotification: function(notification) {
     // process the notification
     // required on iOS only
     navigator.navigate(notification.data.url);
    // notification.finish(PushNotificationIOS.FetchResult.NoData);
   },

   senderID: Config.GCMSENDERKEY,

   permissions: {
     alert: true,
     badge: true,
     sound: true
   },

   popInitialNotification: true,
   requestPermissions: true,

 });
};

此代码成功导航到期望路由,但是当应用程序在后台时,当用户单击通知时,它会在导航到期望路由之前显示应用程序的根路由(闪屏)。我根本不想出现闪屏。

4

1 回答 1

2

我刚刚回顾了图书馆,我不得不说,它的设计真的很糟糕。您应该转到react-native-firebase

但如果你想坚持下去:

我们首先要弄清楚的是,我们如何才能获得打开应用程序的通知?

我们不能onNotification从库中使用,因为我们不知道什么时候会调用回调。

该库有一个选项popInitialNotification,它将抛出打开应用程序的初始通知。如果您在库的源代码中搜索此变量,您会发现以下内容

    if ( this.hasPoppedInitialNotification === false &&
            ( options.popInitialNotification === undefined || options.popInitialNotification === true ) ) {
        this.popInitialNotification(function(firstNotification) {
            if ( firstNotification !== null ) {
                this._onNotification(firstNotification, true);
            }
        }.bind(this));
        this.hasPoppedInitialNotification = true;
    }

如您所见,它将调用一个带有初始通知的回调函数命名的函数。popInitialNotification(callback)

您现在可以使用该功能来获取初始通知。

PushNotification.popInitialNotification(function(notification) {

});

有了这个,您现在可以直接访问初始通知,而无需等待onNotification.

从这里开始,您可以使用 react-navigation 中的 SwitchNavigator,如下例所示:https ://reactnavigation.org/docs/en/auth-flow.html

于 2018-12-01T21:33:31.747 回答