私は通知を送信するためにSNS上GCM
を使用していました。ここで私はあなたがすでにGCM
を設定し、AWS React Native SDK
から必要なライブラリを追加したと仮定して行った手順です。そして、あなたはCognito
を通じて連携アイデンティティを作成する必要が
:
まずAWSからSNS
アプリを作成しますAWSのサービスこれは、モバイルアプリからAWS SNSアプリにデバイストークンを送信するために必要です。 Manage Federated Identities
を選択すると、次に、あなたのプールを作成し、あなたはそのプールのunauthenticated
とauthenticated
ロールのIAMロールを作成する必要がありますプールを作成するときEnable Access to unauthenticated identities
をチェックすることを忘れないでください。 AWSは新しいロールを作成するのに役立ちますが、IAM Roles
メニューに移動し、AmazonSNSFullAccess
を作成したロールに添付する必要があります。それ以外の場合はモバイルアプリからデバイストークンを送信できません。
は、これらの手順を行った後、あなたはAmazonのネイティブSDKに反応使用してデバイストークンを送信しますこと。
class AWSUtility {
constructor() {
const region = "us-west-1"; //change it with your region
const IDENTITY_POOL_ID = "pool id created from Federated Identities"
AWSCognitoCredentials.initWithOptions({region, identity_pool_id: IDENTITY_POOL_ID});
AWSSNS.initWithOptions({region});
}
addTokenToAWSSNS(token, snsEndpointARN) {
const applicationArn = "change with SNS application Amazon resource name";
return Promise.try(() => {
if (!snsEndpointARN) {
return this.createPlatformEndpoint(token, applicationArn);
} else {
return AWSSNS.GetEndpointAttributes({EndpointArn: snsEndpointARN})
.then((result) => {
const {Attributes = {}} = result;
const {Token, Enabled} = Attributes;
const updateNeeded = Token !== token || Enabled !== 'true';
if (updateNeeded) {
return this.updateEndpoint(token).then(() => result.EndpointArn);
}
return snsEndpointARN;
})
.catch(() => {
this.createPlatformEndpoint(token, applicationArn)
});
}
});
}
updateEndpoint(snsEndpointARN, token) {
//AWS is returning error saying that it requires 6 params to update endpoint, if anyone has any idea about it let me know please
return AWSSNS.SetEndpointAttributes({EndpointArn: snsEndpointARN, Attributes: {Token: token, Enabled: true}});
}
createPlatformEndpoint(token, applicationArn) {
return AWSSNS.CreatePlatformEndpoint({Token: token, PlatformApplicationArn: applicationArn})
.then(result => result.EndpointArn)
.catch((error = {}) => {
console.log(error);
});
}
}
export default new AWSUtility();
こんにちは、ご回答いただきありがとうございます。無効なエンドポイントの背後にあるロジックを理解するのに役立ちました。私は、AWS SNSにトークンを送信するためのヘルパークラスを作成しました。自分の実装では、AWSSNSの機能から約束を得るためにいくつかのpromise()呼び出しがないかもしれないことに気付きました。私は正しいですか、あなたの側の他のどこかで扱われていますか? – mvandillen
それはかなり長い時間だったので、それは非常によく覚えていない:) – cubbuk
ああ、いいえ心配、私は今すべての作業を得た。私はまたあなたがsetEndpointAttributesへの文字列として渡す必要があることに気づいたのでEnabled: "true" – mvandillen