使用Expo react native(android)收听FCM推送通知传递



我面临着一个与此极其相似的问题。

  • 我正在使用Expo(SDK38(和托管工作流
  • 我正在CI上使用Turtle CLI创建独立的APK构建
  • 我有一个FCM项目,几乎可以完美地与独立应用程序配合使用。我的意思是:
    • 我已成功获得设备FCM令牌,其代码如下:
      import { Notifications } from 'expo';
      await Notifications.getDevicePushTokenAsync(); // Gives the token successfully
      
    • 我在运行以下NodeJS脚本时发送了推送通知,但是:
      const admin = require('firebase-admin');
      admin.initializeApp({
      credential: require('./my-credentials.json'),
      databaseURL: 'https://MY_URL_HERE'
      });
      admin.messaging.send({
      notification: { title: 'Foo', body: 'Bar' },
      android: { ttl: 86400 },
      token: 'THE_FCM_TOKEN_HERE'
      });
      
      • [次要问题1]如果应用程序在前台,设备不会显示任何通知
      • [次要问题2]如果应用程序不在前台,设备会显示重复的通知

为了完整性,我已经提到了上面的小问题,但我现在面临的主要问题是我的应用程序不会注意到通知到达。听众不会开火。

我尝试了传统通知模块和新通知模块:

// Attempt using Legacy Notifications
// https://docs.expo.io/versions/v38.0.0/sdk/legacy-notifications/
import { Notifications as LegacyNotificationsModule } from 'expo';
// Attempt using New Notifications Module
// https://docs.expo.io/versions/v38.0.0/sdk/notifications/
import * as NewNotificationsModule from 'expo-notifications';
LegacyNotificationsModule.addListener(() => {
// Make any UI change just for we to see it happening
});
NewNotificationsModule.addNotificationReceivedListener(() => {
// Make any UI change just for we to see it happening
});
// I also tried commenting and uncommenting the code below
NewNotificationsModule.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true,
shouldPlaySound: false,
shouldSetBadge: false,
}),
});

回想一下,就像我在上面链接的类似问题中一样,我不是使用Expo通知令牌(形式为ExponentPushToken[xxxxxx](。我使用的是通过Notifications.getDevicePushTokenAsync()获得的标准FCM代币。

我怎样才能做到这一点?

我终于想通了。

我已经向世博会发送了一份PR,以改进这方面的文件。

简而言之,引用我对GitHub:的评论

为了让应用程序对通知做出正确反应,它必须附带一个名为experienceId的特殊字段。我找不到通过Firebase控制台接口发送测试消息的方法;相反,我用执行HTTP POST调用

  • 标题:
    • 授权:key=${FIREBASE_SERVER_KEY_TOKEN}(在我的Firebase项目Settings > Cloud Messaging中获得(
    • 内容类型:application/json
  • 正文:
    {
    "to": "<DEVICE_PUSH_NOTIFICATION_TOKEN>",
    "priority": "normal",
    "data": {
    "experienceId": "@anonymous/my-project-slug",
    "title": "Hello",
    "message": "World"
    }
    }
    

一个没有记录的关键信息是,对于像我这样没有expo帐户(并且正在独立于expo构建一切(的人来说,体验ID应该以@anonymous开头。@awinograd在GitHub中完全理解了这一点。

相关内容

  • 没有找到相关文章