如何获取用于推送通知的Android设备令牌?

如何获取用于推送通知的Android设备令牌?,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,我们已经阅读了各种Stackoverflow问题和答案,并查看了文档和文章,但我们尝试过的所有方法,如FireBaseInstanceId和扩展FirebaseMessagingService,都会导致一个空令牌 出于推送通知的目的,我们如何获取用户设备的令牌尚不清楚 有人能澄清一下我们如何在2021年获得用户的设备令牌吗 谢谢通过这种方式,您可以获得唯一的设备id TelephonyManager telephonyManager; telephonyManager = (TelephonyM

我们已经阅读了各种Stackoverflow问题和答案,并查看了文档和文章,但我们尝试过的所有方法,如FireBaseInstanceId和扩展FirebaseMessagingService,都会导致一个空令牌

出于推送通知的目的,我们如何获取用户设备的令牌尚不清楚

有人能澄清一下我们如何在2021年获得用户的设备令牌吗


谢谢

通过这种方式,您可以获得唯一的设备id

TelephonyManager telephonyManager;
telephonyManager = (TelephonyManager) getSystemService(Context.
                TELEPHONY_SERVICE);
getDeviceId()
将返回唯一的设备ID

String deviceId = telephonyManager.getDeviceId();
顺便说一下,这需要android.permission.READ\u PHONE\u STATE的许可

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.e("newToken", token);
    }

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
    }

}
将此添加到Android清单文件中:

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


每当您的应用程序第一次安装并打开时,都会创建MyFirebaseMessagingService并调用onNewToken(字符串令牌)方法,并生成令牌,该令牌是您的设备令牌或FCM令牌。

FireBaseInstanceId已被弃用,并表示使用FirebaseMessaging检索FCM令牌。 具体而言,该方法的工作方式如下:

Returns the FCM registration token for this Firebase project. This creates a Firebase Installations ID, if one does not exist
所以,为了生成令牌,我认为扩展FirebaseMessagingService并不是必须的,只要在任何需要的地方这样调用它就行了

FirebaseMessaging.getInstance().token.addOnCompleteListener {
        if (!it.isSuccessful) {
            return@addOnCompleteListener
        }
        val token = it.result //this is the token retrieved
    }

不幸的是,这不起作用,这是我们已经尝试过的方法之一。即使在第一次安装和运行时,令牌始终返回空值。请尝试卸载应用程序,然后再次安装,并确保从项目控制台获得最新的google-services.json。不幸的是,这不起作用,这是我们已经尝试过的方法之一。即使在第一次安装和运行时,令牌始终返回空值。我们刚刚尝试过这个。有一条警告,READ_PHONE_状态仅为系统应用保留。运行应用程序时忽略此选项会导致应用程序在启动时崩溃。