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です。これを引き起こすために何が欠けているのか、間違っているのですか?