Amazon SNSを用いてAndroid(GMSとHMS)とiOSに対応したプッシュ通知の実装方法―サーバー(Amazon SNS:プッシュ通知を配信:HMS Part 1)
LambdaとAPI Gatewayで配信用のAPIを作成します。
Lambdaでは、aws-sdkライブラリを使って、DynamoDBに登録したHMSのトークンを取得し、それを対象にして、プッシュ配信内容をAmazon SNSのトピックに送ります。対象のAmazon SNSトピックをトリガーとして、さらに別のLambdaを起動し、プッシュ配信内容をプッシュサーバーに送ります。
プッシュ配信内容をAmazon SNSのトピックに送るLambdaのサンプル
index.js
const PushUtil = require("./pushUtil.js");
exports.handler = function (event, context, callback) {
const pushUtil = new PushUtil();
let pushData = event;
const promiseArray = [];
// Amazon SNSにアクセスするためのPromiseを作成する
const promise = pushUtil.createHmsPushPromise(pushData.HMS, 'Amazon SNSのトピックのARN');
promise.then((result) => {
// レスポンスを返す
callback(null, result);
}).catch((error) => {
callback(null, { error : error });
});
}
pushUtil.js
const TokenUtil = require("./tokenUtil.js");
// AWS SDKをロードする
const AWS = require('aws-sdk');
// リージョンを設定する
AWS.config.update({region: 'ap-northeast-1'});
// SNSサービスのオブジェクトを生成
const sns = new AWS.SNS();
module.exports = class PushUtil {
constructor() {
}
createHmsPushPromise(content, topicArn) {
return new Promise((resolve, reject) => {
const tokenUtil = new TokenUtil();
const getTokenPromise = tokenUtil.createGetTokenPromise();
getTokenPromise.then((result) => {
if (result.hasOwnProperty("Items") && Array.isArray(result.Items)) {
content.token = result.Items.map(function(value) {
if (value.hasOwnProperty("token") && value.token.hasOwnProperty("S")) {
return value.token.S;
}
return "";
});
}
// プッシュのパラメータを設定する
const params = {
// プッシュ内容
Message: JSON.stringify(content),
// 対象トピック
TopicArn: topicArn
};
sns.publish(params, (error, data) => {
if (error) {
reject(error);
return;
}
resolve(data);
});
}).catch((error) => {
reject(error);
});
});
}
}
tokenUtil.js
// AWS SDKをロードする
const AWS = require('aws-sdk');
// リージョンを設定する
AWS.config.update({region: 'ap-northeast-1'});
// DynamoDBサービスのオブジェクトを生成
const ddb = new AWS.DynamoDB();
module.exports = class TokenUtil {
constructor() {
}
createGetTokenPromise() {
return new Promise((resolve, reject) => {
const params = {
TableName: 'token_info'
};
ddb.scan(params, function(error, data) {
if (error) {
reject(error);
return;
}
resolve(data);
});
});
}
}
GitHub
参考
Amazon SNSを用いてAndroid(GMSとHMS)とiOSに対応したプッシュ通知の実装方法
1―概要
2―クライアント(Android-GMS)
3―クライアント(Android-HMS)
4―クライアント(iOS-APNS)
5―サーバー(Amazon SNS:プッシュトークンの保存)
6―サーバー(Amazon SNS:プッシュトークンの管理:HMS)
7―サーバー(Amazon SNS:プッシュトークンの保存:HMS)
8―サーバー(Amazon SNS:プッシュ通知を配信)
9―サーバー(Amazon SNS:プッシュ通知を配信:HMS)
10―サーバー(Amazon SNS:プッシュ通知を配信:複数のデバイスに同時配信)