2017-06-08 1 views
0

SNSプッシュ通知のセットアップ方法に関するチュートリアルに従いましたが、CreatePlatformEndpointResultオブジェクトはnullを返します。私はendpointArnを取得してバックエンドに送ることができるようにする必要があります。以下は私の全体のセットアップです。 http://www.allcode.com/amazon-sns-push-notification-tutorial-android-using-gcm/SNSプッシュ通知の操作方法は? CreatePlatformEndpointResultはnullを返します

まず、私はこれは私のAWSManagerクラス

からである

AWSManager.registerAppToGCM(getApplicationContext())

を呼び出すことにより、GCMからトークンを取得:そしてここでチュートリアルへのリンクですここで

public class AWSManager { 
    private static final String TAG = AWSManager.class.getSimpleName(); 
    private static final String SNS_ACCESS_KEY_ID = "1234567890"; // I have swapped out the real key 
    private static final String SNS_SECRET_KEY = "1234567890"; // I have swapped out the real key 

    private static AmazonSNSClient snsClient; 

    /** 
    * Method is used to retrieve SNSClient object 
    * 
    * @return snsClient object 
    */ 
    public static AmazonSNSClient getSNSClient() { 
     if (FrameworkUtils.checkIfNull(snsClient)) { 
      snsClient = new AmazonSNSClient(new BasicAWSCredentials(SNS_ACCESS_KEY_ID, SNS_SECRET_KEY)); 
      snsClient.setRegion(Region.getRegion(Regions.US_WEST_1)); 
     } 
     return snsClient; 
    } 

    /** 
    * Method is used to register app to GCM 
    * 
    * @param context 
    */ 
    public static void registerAppToGCM(Context context) { 
     SharedPref sharedPref = new SharedPref(context, Constants.PREF_FILE_NAME); 
     String gcmToken = sharedPref.getStringPref(Constants.NOTIFICATION_GCM_TOKEN, ""); 
     if (FrameworkUtils.isStringEmpty(gcmToken)) { 
      new GCMRegisterTask(context).execute(); 
     } 
    } 
} 

バックグラウンドタスク

を実行するクラスです
public class GCMRegisterTask extends AsyncTask<String, Void, Boolean> { 
    private static final String TAG = GCMRegisterTask.class.getSimpleName(); 

    private Context mContext; 

    /** 
    * Constructor 
    * 
    * @param context 
    */ 
    public GCMRegisterTask(Context context) { 
     super(); 
     mContext = context; 
    } 

    @Override 
    protected Boolean doInBackground(String... params) { 
     String token; 
     try { 
      token = InstanceID.getInstance(mContext).getToken(mContext.getString(R.string.gcm_project_id), GoogleCloudMessaging.INSTANCE_ID_SCOPE); 
      SharedPref sharedPref = new SharedPref(mContext, Constants.PREF_FILE_NAME); 
      sharedPref.setPref(Constants.NOTIFICATION_GCM_TOKEN, token); 
      Logger.i(TAG, "GCM token successfully stored to prefs: " + token); 
      return true; 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 
} 

GCMトークンを正常に取得したら、私が使用し、新たな

AWSCreateEndpointTask(mContext).execute(テスト、トークン、 "[email protected]")エンドポイントARNを作成するプロセスを開始する

。テスト= "ARN:AWS:SNS:地域:米国東部-1:アプリ/ GCM/AppNameは" onPostExecuteの内部

public class AWSCreateEndpointTask extends AsyncTask<String, Void, CreatePlatformEndpointResult> { 

    Context mContext; 

    /** 
    * Constructor 
    * 
    * @param context 
    */ 
    public AWSCreateEndpointTask(Context context) { 
     super(); 
     mContext = context; 
    } 

    @Override 
    protected CreatePlatformEndpointResult doInBackground(String[] params) { 
     if (params.length < 3) { 
      return null; 
     } 

     String arn = params[0]; 
     String gcmToken = params[1]; 
     String userData = params[2]; 

     try { 
      CreatePlatformEndpointRequest request = new CreatePlatformEndpointRequest(); 
      request.setCustomUserData(userData); 
      request.setToken(gcmToken); 
      request.setPlatformApplicationArn(arn); 
      return AWSManager.getSNSClient().createPlatformEndpoint(request); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return null; 
     } 
    } 

    @Override 
    protected void onPostExecute(CreatePlatformEndpointResult result) { 
     if (!FrameworkUtils.checkIfNull(result)) { 
      String endpointArn = result.getEndpointArn(); 
      SharedPref sharedPref = new SharedPref(mContext, Constants.PREF_FILE_NAME); 
      sharedPref.setPref(Constants.NOTIFICATION_ENDPOINT_ARN, endpointArn); 
     } 
    } 

、返さCreatePlatformEndpointResultオブジェクトがnullです。これを引き起こすために何が欠けているのか、間違っているのですか?

答えて

0

実装が正しいことが判明しました.Arn値が間違っていました。この競合が発生している他の人には、エンドポイントARNを取得しようとしたときに情報が正しいことを確認してください。これは、開発者コンソールから来てくれ-東-1 ::アプリ/ GCM/

:AWS:SNS私は

ARNに地雷を更新しました。

関連する問題