【AWS】利用SNS发送邮件和推送通知(nodejs)

重要的事项

可以向已验证的电子邮件地址发送和接收电子邮件。还可以将邮件批量发送或推送通知到注册的群组内的电子邮件地址或移动设备上。

请参考下面的 GitHub 来获取本文样例的源代码。

前提 tí)

    • Node.js環境

 

    • AWSアカウント

 

    • プッシュ通知の場合、Firebaseのアカウントも必要

 

    • ※AWSとFirebaseの事前準備は【SNSとFCMの連携】をご参考ください

 

    メールアドレス事前登録し済み(topicやSubscription作成済み)

领域术语

    • DeviceToken

 

    • モバイル端末(デバイス)固有の値

 

    • EndPoint

 

    • 配信対象端末を識別するためのデータです。

 

    • DeviceTokenより作成する、端末を識別するためのID

 

    • Topic

 

    • 配信対象をグルーピングし、配信対象に一斉に通知を配信するための機能です。

 

    • Subscription

 

    Subscriptionとは、作成したTopicと配信対象のEndPointを紐づけるデータです。

处理流程

推送通知

プッシュ通知フロー

发送电子邮件

メール送信フロー

使用Node.js发送电子邮件/推送通知

主题创建

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set region
AWS.config.update({region: 'REGION'});

// Create promise and SNS service object
var createTopicPromise = new AWS.SNS({apiVersion: '2010-03-31'}).createTopic({Name: "TOPIC_NAME"}).promise();

// Handle promise's fulfilled/rejected states
createTopicPromise.then(
  function(data) {
    console.log("Topic ARN is " + data.TopicArn);
  }).catch(
    function(err) {
    console.error(err, err.stack);
  });

订阅话题

邮箱地址的情况下,参数如下所示。协议是电子邮件。

var params = {
  Protocol: 'EMAIL', /* required */
  TopicArn: 'TOPIC_ARN', /* required */
  Endpoint: 'EMAIL_ADDRESS'
};

创建订阅时,使用移动设备的设备令牌,参数如下所示。endPoint是使用设备令牌创建的。

var params = {
  Protocol: 'application', /* required */
  TopicArn: 'TOPIC_ARN', /* required */
  Endpoint: 'MOBILE_ENDPOINT_ARN'
};

订阅主题的设定

// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set region
AWS.config.update({region: 'REGION'});

// Create subscribe/email parameters
var params = {
  Protocol: 'EMAIL', /* required */
  TopicArn: 'TOPIC_ARN', /* required */
  Endpoint: 'EMAIL_ADDRESS'
};

// Create promise and SNS service object
var subscribePromise = new AWS.SNS({apiVersion: '2010-03-31'}).subscribe(params).promise();

// Handle promise's fulfilled/rejected states
subscribePromise.then(
  function(data) {
    console.log("Subscription ARN is " + data.SubscriptionArn);
  }).catch(
    function(err) {
    console.error(err, err.stack);
  });

终点

在电子邮件的情况下,端点是电子邮件地址,但在推送通知的情况下,端点需要根据设备标记来创建。

参数

    • PlatformApplicationArn

 

    • SNSコンソールの[Mobile]の[プッシュ通知]のプラットフォームアプリケーションからプラットフォームアプリケーション作成ボタンをクリックして作成します。

 

    • token

 

    デバイストークン
const params = {
  PlatformApplicationArn: snsPlatformApplicationArn,
  Token: token
}
await sns.createPlatformEndpoint(params).promise()

邮件发送/推送通知

    var payload = {
      GCM: {
        content_available: true,
        data: {
          type: chatType,
          groupId: groupId,
          badge: badge
        },
        notification: {
          body: message,
          title: title,
          badge: badge.toString()//バッジ数
        }
      }
    }
    payload.GCM = JSON.stringify(payload.GCM);
    payload = JSON.stringify(payload);
    const params = {
      TargetArn: endpointArn,
      MessageStructure: 'json',
      Subject: title,
      Message: payload,
    }
    await sns.publish(params).promise()

如果需要应用程序图标的徽章显示,就需要通知的徽章。

badge

省略可、文字列

ホーム画面のアプリアイコンのバッジの値。
これを指定しなかった場合、バッジは変更されません。
0 に設定するとバッジは削除されます。

参考来源:
FCM文档

其他

如果通过邮件发送,可以使用上述设置进行发送,但如果通过推送通知发送,则需要其他的设置。例如,需要设置Firebase的FCM以及iOS的推送通知证书发行等。这里不会进行详细描述。

请参阅

    • ドキュメント

 

    • AWS Javascript SDK SNSリファレンス

 

    ペイロード
bannerAds