Я хочу зарегистрировать маркер 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'
Я не понимаю, почему я получил такое исключение.
спасибо.
Вы проверяете свой манифест и используете интернет-разрешение? –
Можете ли вы скомпилировать против Play Services 8.3 'compile 'com.google.android.gms: play-services-gcm: 8.3.0'' и посмотреть, разрешено ли это? – KayAnn
Привет, эта проблема бывает случайным. Иногда он работает нормально, но иногда он терпит неудачу и исключает исключения. –