Android GCM InstanceId.getToken() - > java.io.IOException:TIMEOUT

时间:2015-10-28 08:54:08

标签: java android google-cloud-messaging

我正在尝试在我的Android应用程序中实现推送通知,但我目前卡在接收令牌的位置。

我正在使用“InstanceID”的最新方法并遵循一些示例。 我已经将权限和服务添加到我的Manifest(并添加了它们的代码),但无论我尝试什么,我总是得到“java.io.IOException:TIMEOUT”错误。我尝试过不同的手机,wifi,Lte和3G,但似乎没有任何改变。

我从来没有说过“SERVICE_NOT_AVAILABLE”的错误。只停留在这一个。

清单

paintComponent(Graphics g)

InstanceID调用:

<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>

instanceID.getId()正在运行。

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

1 个答案:

答案 0 :(得分: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();