2016-05-06 5 views
0

GCMクライアント側コードを実行すると、「invalidRegistration」というエラーが表示されます。私はpageを参照して確認しましたが、まだ成功することができませんでした。1. JSONファイルとサーバーAPIキーで提供されているAPIキー。構成プロセスが異なるときに取得しました。しかし、両方とも、私はInvalidRegistarionを取得しました。 MainActivityがAppCompatActivity {GCM(Googleクラウドメッセージング)でサーバーサイドエラー 'invalidRegistration'

private TextView mTextView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mTextView = (TextView) findViewById(R.id.textView); 

    new GCMRequest().execute(); 
} 


private class GCMRequest extends AsyncTask<Void, Void, String> { 

    @Override 
    protected String doInBackground(Void... voids) { 

     final String API_KEY = "AIzaSyCNPlrqXeZ8IlNYsQGlseHhHPCfgcR5V7c"; // An API key saved on the app server that gives the app server authorized access to Google services 
     final String CLIENT_REG_ID = "821083769456"; //An ID issued by the GCM connection servers to the client app that allows it to receive messages 
     final String postData = "{ \"registration_ids\": [ \"" + CLIENT_REG_ID + "\" ], " + 
       "\"delay_while_idle\": true, " + 
       "\"data\": {\"tickerText\":\"My Ticket\", " + 
       "\"contentTitle\":\"My Title\", " + 
       "\"message\": \"Test GCM message from GCMServer-Android\"}}"; 

     try { 
      URL url = new URL("https://android.googleapis.com/gcm/send"); 
      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
      urlConnection.setDoInput(true); 
      urlConnection.setDoOutput(true); 
      urlConnection.setRequestMethod("POST"); 
      urlConnection.setRequestProperty("Content-Type", "application/json"); 
      urlConnection.setRequestProperty("Authorization", "key=" + API_KEY); 

      OutputStream outputStream = new BufferedOutputStream(urlConnection.getOutputStream()); 
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "utf-8")); 
      writer.write(postData); 
      writer.flush(); 
      writer.close(); 
      outputStream.close(); 

      int responseCode = urlConnection.getResponseCode(); 
      InputStream inputStream; 
      if (responseCode < HttpURLConnection.HTTP_BAD_REQUEST) { 
       inputStream = urlConnection.getInputStream(); 
      } else { 
       inputStream = urlConnection.getErrorStream(); 
      } 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 
      String temp, response = ""; 
      while ((temp = bufferedReader.readLine()) != null) { 
       response += temp; 
      } 
      return response; 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return e.toString(); 
     } 
    } 

    @Override 
    protected void onPostExecute(String message) { 
     super.onPostExecute(message); 

     if (mTextView != null) { 
      try { 
       JSONObject jsonObject = new JSONObject(message); 
       mTextView.setText(jsonObject.toString(5)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
       mTextView.setText(e.toString()); 
      } 
     } 
    } 
} 

} `

を拡張出力は:予め

{ 
multicast_id:XXXX, 
success:0, 
failure:1, 
results: 
{ 
error:InvalidRegistration 
} 

おかげ。

答えて

0

Cloud Messaging - Registering Client Appsからお勧めします。指数バックオフを使用して登録が失敗した場合、クライアントアプリケーションは登録操作を再試行する必要があります。

さらに、サーバーからトークンをリフレッシュして、クライアントアプリケーションとアプリケーションサーバーを潜在的な悪意のある登録トークンの再利用から保護する必要があることにも言及しました。 GCM登録トークンの更新がサーバー側から開始されると、クライアントアプリケーションはGCM登録クライアント/サーバーハンドシェイクを使用してtokenRefreshedメッセージを処理する必要があります。

希望の参照が役立つことを望みます。 :)

関連する問題