2015-10-28 11 views
9

私はアンドロイドアプリでプッシュ通知を実装しようとしていますが、現在トークンを受け取った時点で固執しています。Android GCM InstanceId.getToken() - > java.io.IOException:TIMEOUT

"InstanceID"の最新の方法を使用していて、いくつかの例が続いています。 私のマニフェストにパーミッションとサービスを追加しました(そして、それらのコードも追加しました)が、何をしようとも、私はいつも "java.io.IOException:TIMEOUT"というエラーが出ます。私は別の携帯電話、無線LAN、LTEと3Gを試してみましたが、何も何も変わらないようです。

「SERVICE_NOT_AVAILABLE」というエラーは発生しませんでした。これだけで立ち往生します。

マニフェスト

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<receiver 
    android:name="com.google.android.gms.gcm.GcmReceiver" 
    android:exported="true" 
    android:permission="com.google.android.c2dm.permission.SEND" > 
    <intent-filter> 
     <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     <category android:name="de.company.appname" /> 
    </intent-filter> 
</receiver> 
<service 
    android:name="de.company.gcm.ModuleGCMListenerService" 
    android:exported="false" > 
    <intent-filter> 
    <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
    </intent-filter> 
</service> 
<service 
    android:name="de.company.gcm.ModuleInstanceIDListenerService" 
    android:exported="false"> 
    <intent-filter> 
    <action android:name="com.google.android.gms.iid.InstanceID"/> 
    </intent-filter> 
</service> 

インスタンスIDコール:

try 
{ 
    token = instanceID.getToken(
      senderId, 
      GoogleCloudMessaging.INSTANCE_ID_SCOPE, 
      null); 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
} 

instanceID.getId()が働いています。

W/InstanceID/Rpc: No response [email protected] 
W/System.err: java.io.IOException: TIMEOUT 
W/System.err: at com.google.android.gms.iid.zzc.zzb(Unknown Source) 
W/System.err: at com.google.android.gms.iid.zzc.zza(Unknown Source) 
W/System.err: at com.google.android.gms.iid.InstanceID.zzc(Unknown Source) 
W/System.err: at com.google.android.gms.iid.InstanceID.getToken(Unknown Source) 
+2

は、このレポを見てください[ここ](https://github.com/google/gcm/tree/master/samples/android)と 'に関連したソースを使用する必要がありましたInstanceID.getToken() 'は[ここ](https://github.com/google/gcm/blob/399e88c1ef5bb95395b6392f9061e45b2fb5d49a/samples/android/gcm-demo/src/main/java/com/google/android/gcm/demo)です。 /logic/InstanceIdHelper.java)。 – bjiang

+0

ありがとう、私はすでにすべてのGoogleの例といくつかの他のページを通過してきました。彼らの誰も私が間違っているかもしれない何かの手がかりを私に与えなかった。 – Benni

+0

あなたはレポをクローンしてコードなしで自分のIDEで試してみましたか?あなたはそれを試してみることができます – bjiang

答えて

15

コード内の同じ位置で同じようなエラーを検索すると、私は最終的に問題を認識しました。この場合

New GCM API Register Unknown Source Error

エラー「MAIN_THREADは、」確かにもう少し明らかです。

InstanceId.getToken()をメインスレッドで呼び出すことができないためです。

Google Githubの例で提案されているように、new AsyncTask<Void, Void, Void>()メソッドでは機能しませんでしたが。

私は

new Thread(new Runnable() { 
    public void run() { 
     //code 
    } 
}).start(); 
+1

それは働いた。ありがとう –

+0

それはAsyncTaskのdoInBackgroundメソッドで動作するはずです... – Rohan

+0

問題ではありませんメインスレッドから操作を行う必要がありますが、非同期または新しいスレッドである可能性があります – Sniper

関連する問題