谷歌云消息注册失去连接然后应用程序崩溃

时间:2015-09-16 03:09:30

标签: android google-cloud-messaging

我正在使用Unity的GCM插件。我用动态senderID注册它。但如果我在注册时丢失连接,应用程序崩溃。

错误日志是:

W/System.err( 4993): java.lang.IllegalStateException: sender id not set on constructor
W/System.err( 4993):    at com.google.android.gcm.GCMBaseIntentService.getSenderIds(GCMBaseIntentService.java:125)
W/System.err( 4993):    at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:237)
W/System.err( 4993):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
W/System.err( 4993):    at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err( 4993):    at android.os.Looper.loop(Looper.java:145)
W/System.err( 4993):    at android.os.HandlerThread.run(HandlerThread.java:61)
E/AndroidRuntime( 4993): FATAL EXCEPTION: IntentService[GCMIntentService-DynamicSenderIds-2]
E/AndroidRuntime( 4993): Process: ba.lum.tribalrivals.arabic, PID: 4993
E/AndroidRuntime( 4993): java.lang.Error: FATAL EXCEPTION [IntentService[GCMIntentService-DynamicSenderIds-2]]
E/AndroidRuntime( 4993): Unity version     : 4.6.7f1
E/AndroidRuntime( 4993): Device model      : samsung SM-N910C
E/AndroidRuntime( 4993): Device fingerprint: samsung/treltexx/trelte:5.0.1/LRX22C/N910CXXU1BOE1:user/release-keys
E/AndroidRuntime( 4993): 
E/AndroidRuntime( 4993): Caused by: java.lang.IllegalStateException: sender id not set on constructor
E/AndroidRuntime( 4993):    at com.google.android.gcm.GCMBaseIntentService.getSenderIds(GCMBaseIntentService.java:125)
E/AndroidRuntime( 4993):    at com.google.android.gcm.GCMBaseIntentService.onHandleIntent(GCMBaseIntentService.java:237)
E/AndroidRuntime( 4993):    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
E/AndroidRuntime( 4993):    at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 4993):    at android.os.Looper.loop(Looper.java:145)
E/AndroidRuntime( 4993):    at android.os.HandlerThread.run(HandlerThread.java:61)

我发现原因是gcm.jar(插件库)中的代码:

protected String[] getSenderIds(Context context)
  {
    if (this.mSenderIds == null) {
      throw new IllegalStateException("sender id not set on constructor");
    }
    return this.mSenderIds;
  }

有谁知道如何解决这个问题?我应该更改插件内的代码吗?我该怎么做?

1 个答案:

答案 0 :(得分:0)

不熟悉Unity的GCM插件。但是,这清楚地表明您的应用无法找到您在Google开发人员控制台上创建的项目的发件人ID(项目编号)。找到它,并将其添加到mSenderIds数组。在创建该类的实例时,您似乎可以在构造函数中执行此操作。