2015-11-20 1 views
0

Я хочу зарегистрировать маркер gcm, но получил исключения.Приложение разбилось при регистрации gcm-токена (получено ExceptionInInitializerError)

Версия для ОС в моем устройстве Android Android android 5.0.

Вот мой код для регистрации маркера gcm.

public static String refreshRegistationId(final Context context) { 
    String token = ""; 
    try { 
     // [START register_for_gcm] 
     // Initially this call goes out to the network to retrieve the token, subsequent calls 
     // are local. 
     // [START get_token] 
     InstanceID instanceID = InstanceID.getInstance(context); 
     // R.string.gcm_defaultSenderId (the Sender ID) is typically derived from google-services.json. 
     // See https://developers.google.com/cloud-messaging/android/start for details on this file. 
     token = instanceID.getToken(SENDER_ID, 
       GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 
     // [END get_token] 
     Log.i(TAG, "GCM Registration Token: " + token); 
     NidusTool.putStringSharedPreference(context, GCM_REGISTER_TOKEN, token); 

     // TODO: Implement this method to send any registration to your app's servers. 
     // sendRegistrationToServer(token); 

     // Subscribe to topic channels 
     // subscribeTopics(token); 

     // [END register_for_gcm] 
    } catch (Exception e) { 
     Log.d(TAG, "Failed to complete token refresh", e); 
    } 
    // Notify UI that registration has completed, so the progress indicator can be hidden. 
    // Intent registrationComplete = new Intent(QuickstartPreferences.REGISTRATION_COMPLETE); 
    // LocalBroadcastManager.getInstance(this).sendBroadcast(registrationComplete); 
    return token; 

} 

ExceptionInInitializerError происходит при вызове instanceID.getToken(SENDER_ID,GoogleCloudMessaging.INSTANCE_ID_SCOPE, null)

Стек трассировка

java.lang.ExceptionInInitializerError 
    at java.lang.Class.classForName(Native Method) 
    at java.lang.Class.forName(Class.java:306) 
    at java.security.Provider$Service.newInstance(Provider.java:1072) 
    at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151) 
    at java.security.Signature.tryAlgorithmWithProvider(Signature.java:217) 
    at java.security.Signature.tryAlgorithm(Signature.java:203) 
    at java.security.Signature.getSignature(Signature.java:175) 
    at java.security.Signature.getInstance(Signature.java:105) 
    at com.google.android.gms.iid.zzc.zza(Unknown Source) 
    at com.google.android.gms.iid.zzc.zza(Unknown Source) 
    at com.google.android.gms.iid.zzc.zzb(Unknown Source) 
    at com.google.android.gms.iid.zzc.zza(Unknown Source) 
    at com.google.android.gms.iid.InstanceID.zzc(Unknown Source) 
    at com.google.android.gms.iid.InstanceID.getToken(Unknown Source) 

Вот моя зависимость в Gradle.

// for gcm to use support-annotations 23.0.1 
compile 'com.android.support:support-annotations:23.0.1' 
compile 'com.google.android.gms:play-services-gcm:8.1.0' 
compile 'com.android.support:appcompat-v7:23.0.0' 

Я не понимаю, почему я получил такое исключение.

спасибо.

+0

Вы проверяете свой манифест и используете интернет-разрешение? –

+0

Можете ли вы скомпилировать против Play Services 8.3 'compile 'com.google.android.gms: play-services-gcm: 8.3.0'' и посмотреть, разрешено ли это? – KayAnn

+0

Привет, эта проблема бывает случайным. Иногда он работает нормально, но иногда он терпит неудачу и исключает исключения. –

ответ

0

Изменение зависимости в вашем buil.gradle от:

compile 'com.google.android.gms:play-services-gcm:8.1.0'

к:
compile 'com.google.android.gms:play-services-gcm:8.3.0'

Кроме того, проверьте менеджер SDK в Android Studio, чтобы убедиться, что вы загрузили последнюю версию/пересмотр Служб Google Play.

Итак, как только вы меняете зависимости, синхронизируйте проект и все должно быть установлено. More info.

PS: Для справок в будущем обратите внимание, что вы можете найти ответы на похожие вопросы, выполнив быстрый поиск в рамках этого сообщества или поиска Google.

Смежные вопросы