Firebase Cloud Messaging 在 Android 12+ 上无法对 SDK 31+ 进行身份验证

S.B*_*ich 4 firebase firebase-authentication firebase-cloud-messaging android-12 android-13

我为我的应用程序设置了 FCM。它非常适合运行 Android 11 及更低版本的设备。但对于 Android 12 及更高版本的设备,我无法通过使用接收令牌

FirebaseMessaging.getInstance().token.addOnCompleteListener {
            ...
        } 
Run Code Online (Sandbox Code Playgroud)

我收到错误:java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: AUTHENTICATION_FAILED而不是令牌

显现

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.boltic28.learnmultiplying">

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

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.LearnMultiplying"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <service
            android:name=".services.firebase.AppFirebaseMessagingService"
            android:exported="false">

            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <meta-data
            android:name="com.google.firebase.messaging.default_notification_channel_id"
            android:value="@string/default_notification_channel_id" />

    </application>

</manifest>
Run Code Online (Sandbox Code Playgroud)

应用程序:

plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'com.google.gms.google-services'
}

android {
    compileSdk 33

    defaultConfig {
        applicationId "com.boltic28.learnmultiplying"
        minSdk 26
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
    kotlinOptions {
        jvmTarget = '11'
    }
    ...
}

dependencies {
    ...
    implementation 'com.google.firebase:firebase-messaging:23.0.4'
    ...
}
Run Code Online (Sandbox Code Playgroud)

服务:

class AppFirebaseMessagingService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        super.onNewToken(token)

        println("->> new token: $token")
    }

    override fun onMessageReceived(message: RemoteMessage) {
        super.onMessageReceived(message)

        println("->> new message: ${message.notification?.title} - ${message.notification?.body}")
    }
}
Run Code Online (Sandbox Code Playgroud)

有人有一些建议吗?

数据:目标应用程序:SDK33 运行于:SDK31 FCM 版本:23.0.6

S.B*_*ich 7

问题出在模拟器上,FCM 不会为没有 Google Play 服务的 SDK31+ 下的设备提供令牌。要解决问题并获取令牌,您必须使用模拟器或安装了 Google Play 服务的设备,Google API 还不够。 带有 Google Play 的模拟器

如何使用 Google Play 创建模拟器