11

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

我读过这个,但发现很难理解。有没有人有过如何做到这一点的经验?

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

我已按照此链接中的说明进行操作

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

  2. 我打开 Amazon SNS,添加我的设备 ID,然后发布一条消息。我在手机上收到消息。到目前为止效果很好。

    我的问题

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

4

3 回答 3

11

使用此处记录的 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,但这是 Reid 指出的一个愚蠢的错字,现在已在上面修复。

于 2014-07-04T17:51:21.837 回答
1

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

此外,还有更多信息:http: //aws.amazon.com/sdkforandroid/

于 2013-11-05T22:51:55.693 回答
1

这适用于 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");
        }
    }
于 2017-06-07T13:20:57.937 回答