直接向Amazon SNS注册设备ID

我正在使用Amazon Web Service将通知直接发送到设备。 安装应用程序后,我得到设备ID,我需要手动添加到Amazon SNS。 我想知道在用户启动应用程序的那一刻是否有注册设备ID直接与亚马逊服务器。

我看过这个 ,但是很难理解。 有没有人有任何以前的经验,如何做到这一点?

编辑2(到目前为止我所做的)

我遵循这个链接的指示

  1. 我按照说明下载了snspobilepush.zip文件,并提取并导入到eclipse中。 我添加GCM项目编号,添加jar文件并运行应用程序。 我得到我的设备注册ID。

  2. 我打开Amazon SNS,添加我的设备ID,然后发布消息。 我在手机上收到消息。 迄今为止工作很好。

    我的问题

我会为我的应用程序有很多潜在的用户。 因此,将每个设备ID手动添加到SNS是没有意义的。 我需要Amazon SNS直接注册我的设备ID,当我启动应用程序。 我有什么select吗? 在文档中我找不到任何明确的答案。
此链接告诉我使用“AWS令牌售货服务”。 但是,我找不到如何做到这一点的例子。

Solutions Collecting From Web of "直接向Amazon SNS注册设备ID"

使用这里logging的AmazonSNSClient:

http://docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

应该可以使用类似这样的代码进行注册:

AWSCredentials awsCredentials = new BasicAWSCredentials("XXXXXX", XXXXXXXXXXXXXXX"); String platformApplicationArn = "arn:aws:sns:us-east-1:123456789:app/GCM/myappname"; AmazonSNSClient pushClient = new AmazonSNSClient(awsCredentials); String customPushData = "my custom data"; CreatePlatformEndpointRequest platformEndpointRequest = new CreatePlatformEndpointRequest(); platformEndpointRequest.setCustomUserData(customPushData); platformEndpointRequest.setToken(pushNotificationRegId); platformEndpointRequest.setPlatformApplicationArn(platformApplicationArn); CreatePlatformEndpointResult result = pushClient.createPlatformEndpoint(platformEndpointRequest); Log.w(TAG, "Amazon Push reg result: " + result); 

它不喜欢我的ARN,但这是里德指出的一个愚蠢的错字,现在已经固定在上面。

有可用的Android AWS SDK。 查看文档链接: http : //docs.aws.amazon.com/AWSAndroidSDK/latest/javadoc/

此外,更多信息可用: http : //aws.amazon.com/sdkforandroid/

这适用于Firebase和Cognito。 一个AsyncTask是必要的,以避免在主线程上运行。

 private class RegisterIdForAWS extends AsyncTask<String, Void, Void> { private Exception exception; protected Void doInBackground(String... urls) { try { String pushNotificationRegId = FirebaseInstanceId.getInstance().getToken(); if (pushNotificationRegId != null) { CognitoCachingCredentialsProvider provider = new CognitoCachingCredentialsProvider( getApplicationContext(), "us-west-2:aaaaaaaaa-1234-1234-1234-0bbbbbbbbbbbb", Regions.US_WEST_2); String platformApplicationArn = "arn:aws:sns:us-west-2:123456789:app/GCM/appname"; AmazonSNSClient pushClient = new AmazonSNSClient(provider); pushClient.setRegion(Region.getRegion(Regions.US_WEST_2)); String customPushData = ""; CreatePlatformEndpointRequest platformEndpointRequest = new CreatePlatformEndpointRequest(); platformEndpointRequest.setCustomUserData(customPushData); platformEndpointRequest.setToken(pushNotificationRegId); platformEndpointRequest.setPlatformApplicationArn(platformApplicationArn); CreatePlatformEndpointResult result = pushClient.createPlatformEndpoint(platformEndpointRequest); Log.w(TAG, "Amazon Push reg result: " + result); } } catch (Exception e) { this.exception = e; } return null; } protected void onPostExecute(String text) { Log.w(TAG, "Amazon Push reg Finished"); } }