使用SNS发送推送通知-Expo App

时间:2020-11-09 21:54:59

标签: amazon-web-services react-native expo amazon-sns

我正在创建一个将使用推送通知的Expo应用程序。我不想为此使用Expo的服务器,而是想使用AWS SNS。这就是我所做的:

  1. 在Firebase中创建应用程序并获取API密钥。
  2. 使用在步骤1中获得的API密钥在SNS上创建平台应用程序。
  3. 使用expo获取设备令牌。
  4. 在步骤2中创建的应用程序中的SNS上创建了一个端点。

当我尝试发送推送通知时,它不起作用。我尝试过:

  • 我确保使用.getDevicePushTokenAsync()而不是getExpoPushTokenAsync()来获取可与SNS一起使用的设备令牌。
  • 当我在Android设备上测试该应用程序时,我可以进行console.log设备令牌(这是我用来添加上述第4步中提到的端点的内容。仍然没有:(
  • 我构建了一个独立的应用程序,下载了.apk文件,然后将其安装在我的设备上,但现在仍无法检索到推送令牌。我真的不知道为什么在构建应用程序并将其安装在我的设备上后,此方法不再起作用。它返回

我在想,如果我能够构建该应用程序并获取设备令牌,则可以使它正常运行,但是没有运气。对我做错了或应该做的事有任何想法吗?

1 个答案:

答案 0 :(得分:0)

经过2天的努力,我终于做到了。我将提供我所遵循的所有步骤,希望对其他人有帮助:

  1. 创建一个Firebase项目。
    • 点击“添加项目”
    • 提供名称。点击“继续”
    • 点击“创建项目”
    • 项目准备就绪后,点击“继续”
  2. 点击显示“项目概述”旁边的齿轮图标
  3. 单击项目设置。
  4. 在显示的页面中,单击Cloud Messaging
  5. 复制“服务器密钥”的值。稍后将在SNS中创建应用程序平台时使用它。
  6. 在同一“设置”页面中,单击“常规”标签。
  7. 在页面底部,您将看到一个部分,显示“您的应用”。它应该说:“您的项目中没有应用程序”。单击Android图标。
  8. 这是重要的一步。您需要提供“ Android包名称”。转到Expo应用程序并找到android.package的值。将其复制并放在Firebase上要求输入Android软件包名称的位置。
  9. 点击“注册应用”。
  10. 重要步骤。单击显示“下载google-services.json”的按钮。
  11. 将文件保存在您的博览会项目的根源。
  12. 返回Expo项目中的app.json文件。它具有android值的地方,请确保这至少是您拥有的:
"android": {
      "googleServicesFile": "./google-services.json",
      "package": "com.astest.mypackage",
      "useNextNotificationsApi": true
 },
  1. 按照说明here设置客户端应用程序。确保不包括sendPushNotification()函数,因为您实际上将使用SNS。

  2. 在registerForPushNotificationsAsync()函数中,确保使用.getDevicePushTokenAsync()而不是.getExpoPushTokenAsync()

  3. 在SNS中创建平台应用程序

  • 推送通知平台:选择FCM
  1. 在您的代码中,确保在SNS中创建一个应用程序终结点。或通过控制台进行操作。

  2. 通过使用SNS中的控制台发送测试消息来测试设置。选择您的端点,然后单击“发布消息”。

  3. 单击“每次交付的自定义有效负载”。

  4. 使用此代码:

{
  "GCM": "{ \"notification\": {\"title\": \"Title of notification\", \"body\": \"It works\" } }"
}
  1. 单击发布消息。

  2. 要以编程方式发布消息,您可以执行以下操作:

var sns = new AWS.SNS({ apiVersion: '2010-03-31', region: 'us-east-1'})
    
        let notification = JSON.stringify({
            'notification': {
                'title': "title of notification",
                'body': "Your message goes here",
                'data': {}
            }
        });
    
    
        var params = {
            Message: JSON.stringify({
                GCM: notification
            }),
            MessageStructure: "json",
            TargetArn: "###Your Target ARN##"
        };
    
        sns.publish(params, function(err, data) {
            if (err) {
                console.log("There was an error sending the push notification----> ", err)
            } // an error occurred
            else{
                console.log("Push notification sent successfully!!!! ", data);
            }                // successful response
        });

现在,这当然仅适用于Android。但这有效!使其适应APN并不难。

相关问题