addNotificationReceivedListener 在使用 expo-notifications 时未在 expo React Native 中接收通知

问题描述 投票:0回答:1

我在项目中使用 expo React Native,并且在项目中使用 expo-notifications 包。

我已将 "useNextNotificationsApi": true 添加到我的 app.json 文件中 在expo对象下的android对象下,所以expo.android.useNextNotificationsApi:true。

我还在从服务器发送到 expo 服务器的消息上设置了 experienceId,我正在使用 https://github.com/expo/expo-server-sdk-node 包进行发送。

   messages.push({
               to: red_user.fcm_token,
               sound: 'default',
               title: "Stylist Response",
               body: "Stylist has agreed to fulfill the request",
               data: {
                   experienceId: "@glamcentralng/GlamCentral",
                   order: order._id,
                   stylist_response: "agreed" 
               },
          })  

在我的 expo React Native 应用程序中,我正在使用我提到的 expo-notifications 包,并且我的类组件中有以下设置。

import * as Notifications from 'expo-notifications';

.
.
.
.

 componentDidMount() {

    //Not working at all 
    Notifications.addNotificationReceivedListener( notification => {
      console.log(notification);
      this._handleNotification(notification)
    });

    //Working well
    Notifications.addNotificationResponseReceivedListener(response => {
      console.log(response);
    });
  
    this.registerForPushNotificationsAsyncNew();
}

addNotificationReceivedListener 在收到通知时没有收到通知,但我将其视为我的真实 Android 设备上的正常通知(我没有使用模拟器)。根据文档,当我单击通知时,addNotificationResponseReceivedListener 应该处理它并且确实如此。所以 addNotificationReceivedListener 不起作用,但 addNotificationResponseReceivedListener 效果很好。

还要补充的一件事是,我在按照文档进行注册的函数中获得了一个令牌。

不知道如何解决这个问题,因为我已经检查了这里和 github 上的其他线程。如有任何帮助,我们将不胜感激。

android react-native expo expo-notifications
1个回答
0
投票

我遇到了与你类似的问题,为了解决它,我实际上需要做一些棘手的事情,通常我没有通过expo API找到解决方案,所以这就是我所做的: 我安装了 firebase 消息传递(别担心,我不会使用 firebase,只是为了解决问题),并且我通过添加它们来添加权限,认为是 React Native 附带的请求模块,接下来,我使用设置了一个通知处理程序firebase 消息传递,使用此方法来自 expo-sdk 的通知将使用此处理程序进行处理。这是我添加的内容:

PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS);
useEffect(() => {
    const unsubscribe = messaging().onMessage(async (remoteMessage) => {
        Alert.alert("A new FCM message arrived!", JSON.stringify(remoteMessage));
    });

    return unsubscribe;
}, []);

如果您使用 ios,请按照此处的 Firebase 权限设置进行操作。 您也可能需要在您的请求中添加scopekey(scopekey“@glamcentralng/GlamCentral”)

如果不清楚,请见谅。

© www.soinside.com 2019 - 2024. All rights reserved.