Невозможно получить главный токен — java.lang.SecurityException: не разрешено запускать намерение службы

#android #google-cloud-messaging

#Android #google-облако-обмен сообщениями

Вопрос:

что это :

Невозможно получить главный токен java.lang.SecurityException: не разрешено запускать намерение службы { act=com.google.android.c2dm.intent.ЗАРЕГИСТРИРОВАТЬ pkg=com.google.android.gms (имеет дополнительные возможности) } без разрешения com.google.android.c2dm.permission.ПОЛУЧИТЬ в android.app.ContextImpl.startService(ContextImpl.java: 1161) в android.content.ContextWrapper.startService(ContextWrapper.java: 383) на com.google.firebase.iid.zzf.zzb (неизвестный источник) на com.google.firebase.iid.zzf.zza (неизвестный источник) на com.google.firebase.iid.zzf.zzb (неизвестный источник) на com.Google.firebase.iid.zzf.zza (неизвестный источник) на com.google.firebase.iid.zzd.zzc (неизвестный источник) на com.google.firebase.iid.zzd.getToken (неизвестный источник) на com.google.firebase.iid.FirebaseInstanceId.getToken (неизвестный источник) на com.google.firebase.iid.FirebaseInstanceId.D (Неизвестный источник) на com.google.firebase.iid.FirebaseInstanceIdService.zza (неизвестный источник) на com.google.firebase.iid.FirebaseInstanceIdService.zzm (неизвестный источник) на com.Google.firebase.iid.zzb $ 2.выполнить (неизвестный источник) на java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1076) в java.util.concurrent.ThreadPoolExecutor $Worker.run(ThreadPoolExecutor.java:569) на java.lang.Thread.run(Thread.java: 856)

мой файл манифеста :

 <uses-permission android:name="android.permission.INTERNET" />

    <!-- [START gcm_permission] -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <!-- [END gcm_permission] -->

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:name=".Main2Activity">
        </activity>

        <!-- Firebase Notifications -->
        <service
            android:name="com.badboys.gcm.service.MyFirebaseMessagingService"
            android:exported="false" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </service>
        <service
            android:name="com.badboys.gcm.service.MyFirebaseInstanceIDService"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.android.gms.iid.InstanceID" />
            </intent-filter>
        </service>

        <!-- ./Firebase Notifications -->
    </application>
  

Ответ №1:

Добавить

разрешение android: name=».permission.C2D_MESSAGE» android: ProtectionLevel=»подпись» />

Ответ №2:

Проверьте Настройку клиента GCM для Android, если вы что-то пропустили.

Из того, что я прочитал, вам не хватает 1-го разрешения, которое не позволяет другим приложениям регистрировать / получать ваши сообщения.

 "packagename" ".permission.C2D_MESSAGE"
  

Вам также не хватает нескольких элементов, которые могут вызвать проблему.

Теперь, если вам нужна реализация, зависящая от Firebase, измените действие фильтра намерений MyFirebaseMessagingService на

 <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  

и MyFirebaseInstanceService для

 <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>