2017-02-23 23 views
3

私はAWS-SDK-反応するネイティブモジュールを試してみました:構成はいくつかの時間がかかりましたが、このリンクのおかげで、私はすなわちトピックを一覧表示することができReact Native(Android)でAWS SNSトピックを購読するには?

https://github.com/awslabs/aws-sdk-react-native

https://github.com/awslabs/aws-sdk-react-native/issues/35

https://github.com/awslabs/aws-sdk-react-native/blob/master/SNS/IntegrationTests/SNSTests.js

このテストには、電子メールを受信するための購読方法は含まれていますが、アプリでの通知方法のサンプルは含まれていません。私はplatformEndpoint、PlatformApplicationArn、およびdeviceTokenを取得する方法を知らない。

endPoint = sns.createPlatformEndpoint({ 
    PlatformApplicationArn: '{APPLICATION_ARN}', 
    Token: '{DEVICE_TOKEN}' 
}) 
... 
var subscribeRequest= { 
    "Protocol":"application", 
    "TopicArn":topicARN, 
    "Endpoint":endPoint 
} 
try{ 
    await AWSSNS.Subscribe(subscribeRequest); 
}catch(e){ 
    console.error(e); 
    shouldResolve = false; 
    return shouldResolve; 
} 

サンプルがありますか? 私は認証サンプルも探しています。 ファイヤーベースを使用する方が簡単でしょうか?

おかげ

答えて

5

私は通知を送信するためにSNS上GCMを使用していました。ここで私はあなたがすでにGCMを設定し、AWS React Native SDKから必要なライブラリを追加したと仮定して行った手順です。そして、あなたはCognitoを通じて連携アイデンティティを作成する必要が

enter image description here

まずAWSからSNSアプリを作成しますAWSのサービスこれは、モバイルアプリからAWS SNSアプリにデバイストークンを送信するために必要です。 Manage Federated Identities

enter image description here

を選択すると、次に、あなたのプールを作成し、あなたはそのプールのunauthenticatedauthenticatedロールのIAMロールを作成する必要がありますプールを作成するときEnable Access to unauthenticated identities enter image description here

をチェックすることを忘れないでください。 AWSは新しいロールを作成するのに役立ちますが、IAM Rolesメニューに移動し、AmazonSNSFullAccessを作成したロールに添付する必要があります。それ以外の場合はモバイルアプリからデバイストークンを送信できません。

enter image description here

は、これらの手順を行った後、あなたは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(); 
+0

こんにちは、ご回答いただきありがとうございます。無効なエンドポイントの背後にあるロジックを理解するのに役立ちました。私は、AWS SNSにトークンを送信するためのヘルパークラスを作成しました。自分の実装では、AWSSNSの機能から約束を得るためにいくつかのpromise()呼び出しがないかもしれないことに気付きました。私は正しいですか、あなたの側の他のどこかで扱われていますか? – mvandillen

+0

それはかなり長い時間だったので、それは非常によく覚えていない:) – cubbuk

+0

ああ、いいえ心配、私は今すべての作業を得た。私はまたあなたがsetEndpointAttributesへの文字列として渡す必要があることに気づいたのでEnabled: "true" – mvandillen

関連する問題