博览会通知

时间:2018-10-20 18:29:16

标签: android notifications expo

我正在为我的应用程序使用expo通知,它在ios上可以正常运行,但在android上不起作用。我执行通知的方式是通过以下代码获取密钥

const { status: existingStatus } = await Permissions.getAsync(
          Permissions.NOTIFICATIONS
        );
        let finalStatus = existingStatus;

        // only ask if permissions have not already been determined, because
        // iOS won't necessarily prompt the user a second time.
        if (existingStatus !== 'granted') {
          // Android remote notification permissions are granted during the app
          // install, so this will only ask on iOS
          const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
          finalStatus = status;
        }

        // Stop here if the user did not grant permissions
        if (finalStatus !== 'granted') {
          return;
        }

        // Get the token that uniquely identifies this device
        let token = await Notifications.getExpoPushTokenAsync();
        alert(token)

然后将令牌保存在服务器中并按以下方式发送通知:

发送帖子方法 https://exp.host/--/api/v2/push/send

{
  "to": "ExponentPushToken[HOKJqEF5FdGLRO7s-Kg4Ns]",
  "title":"Test",
  "body": "Test"
}

我是否必须使用firebase FCM使其在Android中工作?

2 个答案:

答案 0 :(得分:0)

根据tutorial博览会,除非您要创建要发布的APK,否则FCM无需在Android上使用Expo推送通知服务。

我已经创建了一个snack进行比较,您可能需要安装expo的真实设备才能获得推送令牌。致电https://exp.host/--/api/v2/push/send时,您应该收到如下响应:

{
    "data": {
        "id": "a0c9af62-5b56-449e-aaea-51bee782dd3d",
        "status": "ok"
    }
}

答案 1 :(得分:0)

是的,如果您想在 Google Play 商店中发布您的应用 - 这就是重点。在世博应用程序中,它还在引擎盖下使用了 FCM。

expo push notification documentation page 中提到的不是很清楚,推送通知在独立的 android/ios 应用程序中工作需要几个步骤。虽然它在文档中提到页面底部的“后续步骤”,但从第一段来看,他们并不清楚他们将 expo 应用程序通知与独立的 android/ios 应用程序通知区分开来。相反,它认为 Expo 会处理所有事情,就好像独立应用程序不需要更多步骤一样。它当然仅适用于 Expo 应用程序。但是,当我们进入 Next Steps 页面时,我们会在“凭据”部分找到最重要的信息。

这就是 Android Standalone 应用程序的工作方式(我已经完成了)。我们需要设置我们自己的 Firebase 项目,如此处 Using FCM for Push Notifications 所述。如果您使用 Expo 服务器发送 Push 通知,请确保按照“上传服务器凭据”的步骤操作。您将看到在您的 Expo 凭证中添加了 FCM 服务器密钥。

应该不会花太多时间,但对我来说,设置这些额外步骤需要 1 个小时左右,因为我是第一次学习这些。