0

私はAWS Mobile Hubプッシュ統合ガイドと、統合AWS SNSプッシュサービスをアプリで実行しました。私は、アプリを開くと、私は、このエラーログを取得:アプリで言及AndroidアプリのFCM + SNSトークンでエラーが発生しました

E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.intap.appme, PID: 23576 
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.intap.name/com.intap.name.MainActivity}: com.amazonaws.AmazonServiceException: 1 validation error detected: Value null at 'token' failed to satisfy constraint: Member must not be null (Service: AmazonSNS; Status Code: 400; Error Code: ValidationError; Request ID: 21d6a3b2-0459-513a-bf7a-f3c1d99d41ac) 
                   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.AmazonServiceException: 1 validation error detected: Value null at 'token' failed to satisfy constraint: Member must not be null (Service: AmazonSNS; Status Code: 400; Error Code: ValidationError; Request ID: 21d6a3b2-0459-513a-bf7a-f3c1d99d41ac) 
                   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.createPlatformEndpoint(AmazonSNSClient.java:447) 
                   at com.amazonaws.mobile.push.PushManager.subscribeToTopic(PushManager.java:264) 
                   at com.intap.name.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:264(全メソッド)

public void subscribeToTopic(final SnsTopic topic) { 
    final CreatePlatformEndpointRequest endpointRequest = new CreatePlatformEndpointRequest(); 
    endpointRequest.setPlatformApplicationArn(platformApplicationArn); 
    try { 
     endpointRequest.setToken(InstanceID.getInstance(context).getToken(sharedPreferences.getString("deviceToken", ""), GoogleCloudMessaging.INSTANCE_ID_SCOPE)); 
    } catch (IOException e) { 
     Log.e("Error", e.getMessage()); 
    } 
    /* This is line 264 -> */ final CreatePlatformEndpointResult endpointResult = sns.createPlatformEndpoint(endpointRequest); 

    final SubscribeRequest request = new SubscribeRequest(); 
    request.setEndpoint(endpointResult.getEndpointArn()); 
    request.setTopicArn(topic.getTopicArn()); 
    request.setProtocol(SNS_PROTOCOL_APPLICATION); 
    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()); 

オンラインのFirebaseコンソールからプッシュメッセージを送信しようとすると、デバイスはプッシュメッセージを取得し、メッセージをクリックしてアプリを開くと、クラッシュすることがあります。

オンラインSNSコンソールからプッシュメッセージを送信しようとしているときに、プッシュ通知が表示されません。つまり、SNSへの登録時にエラーが発生しています。

どうすれば解決できますか?私はそれについては考えていません...

答えて

2

GoogleのSDKからトークンがnullとして戻ってきています。この線に起因する理由:

endpointRequest.setToken(InstanceID.getInstance(context) 
    .getToken(sharedPreferences.getString("deviceToken", ""), 
     GoogleCloudMessaging.INSTANCE_ID_SCOPE)); 

入手トークン(最初のパラメータ)は、GCM送信者IDではなくsharedPreferencesから引き出さとして渡されるデバイストークンであるべきです。問題を修正する必要があり、次のように送信者IDを渡すようにコードを変更する:

endpointRequest.setToken(InstanceID.getInstance(context) 
    .getToken(gcmSenderID, GoogleCloudMessaging.INSTANCE_ID_SCOPE)); 

また、あなたが貼り付けコードはかなり遠い過去に発生したモバイルハブプロジェクトから変更されたことが表示されます。それ以来、PushManagerの改良がなされています。モバイルハブによって生成された最新のバージョンはGCMTokenHelperクラスを使用します。このクラスは、貼り付けたコードには存在しません。もう一度Mobile Hubを使用してサンプルアプリやSDKを生成し、最近発生したコードを使用するようにアプリを更新して、まだ問題が発生している場合は報告してください。

関連する問題