AWS SNS中的参数无效Android应用程序
问题描述:
我已将AWS SNS API集成到我的Android应用程序中。当我打开我的设备上的应用程序,我得到这个错误日志:AWS SNS中的参数无效Android应用程序
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.intap.appme, PID: 20780
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.intap.appme/com.intap.appme.MainActivity}: com.amazonaws.services.sns.model.InvalidParameterException: Invalid parameter: Endpoint (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID: e8589d7c-dec8-55e1-807f-cd16c8794be8)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: com.amazonaws.services.sns.model.InvalidParameterException: Invalid parameter: Endpoint (Service: AmazonSNS; Status Code: 400; Error Code: InvalidParameter; Request ID: e8589d7c-dec8-55e1-807f-cd16c8794be8)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199)
at com.amazonaws.services.sns.AmazonSNSClient.invoke(AmazonSNSClient.java:2262)
at com.amazonaws.services.sns.AmazonSNSClient.subscribe(AmazonSNSClient.java:1256)
at com.amazonaws.mobile.push.PushManager.subscribeToTopic(PushManager.java:251)
at com.intap.appme.MainActivity.onCreate(MainActivity.java:50)
at android.app.Activity.performCreate(Activity.java:6876)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)
at android.app.ActivityThread.access$1100(ActivityThread.java:221)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7224)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
日志中的代码行是那些线: PushManager.java:251(整体法)
public void subscribeToTopic(final SnsTopic topic) {
final SubscribeRequest request = new SubscribeRequest();
request.setEndpoint(endpointArn);
request.setTopicArn(topic.getTopicArn());
request.setProtocol(SNS_PROTOCOL_APPLICATION);
/* Line 251 -> */ final SubscribeResult result = sns.subscribe(request);
// update topic and save subscription in shared preferences
final String subscriptionArn = result.getSubscriptionArn();
topic.setSubscriptionArn(subscriptionArn);
sharedPreferences.edit().putString(topic.getTopicArn(), subscriptionArn).apply();
}
MainActivity.java:50
pushManager.subscribeToTopic(pushManager.getDefaultTopic());
我没有真正意识到我的应用程序中的无效参数是什么,所以你可以帮我吗?
答
根据日志,无效参数是端点。
为了让你能做的终点......
final CreatePlatformEndpointRequest request = new CreatePlatformEndpointRequest();
request.setPlatformApplicationArn(platformApplicationArn);
request.setToken(gcmToken);
final CreatePlatformEndpointResult result = snsClient.createPlatformEndpoint(request);
端点可以通过检索:
result.getEndpointArn();
我没有任何变量的推移名字'gcmToken'或'snsClient'在我的应用程序。你能帮我解决吗?还是有另一种方法来检索端点ARN? –
对不起,snsClient == sns 和gcmToken可以通过检索: gcmToken = instanceID.getToken(gcmSenderID,GoogleCloudMessaging.INSTANCE_ID_SCOPE); ...其中instanceID是InstanceID对象(com.google.android.gms.iid.InstanceID) –
好的,我已经将它添加到了我的代码中,但现在我得到了这个错误日志:''null'at'token'未能满足限制:成员不能为空。你也许知道我为什么得到这个错误以及如何解决它?我会在几分钟后发布完整的日志。 –