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

问题描述 投票:0回答:5

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

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

有人可以澄清一下 2021 年我们如何获取用户的设备令牌吗?

谢谢

android firebase firebase-cloud-messaging
5个回答
5
投票

FireBaseInstanceId 已弃用,并且 文档 表示使用 FirebaseMessaging 检索 FCM 令牌。 特别是方法 getToken() 的工作方式如下:

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
    }

4
投票

一旦您有了一个可以运行的示例推送通知项目,那么 Java 代码就是:

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

来源= https://firebase.google.com/docs/cloud-messaging/android/client


3
投票
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(String token) 方法并生成令牌,即您的设备令牌或 FCM 令牌。


0
投票

有什么方法可以不使用firebasemessagingservices吗?我只想要设备令牌(使用 aws 推送通知)


-2
投票

通过这种方式你可以获得唯一的设备ID

TelephonyManager telephonyManager;
telephonyManager = (TelephonyManager) getSystemService(Context.
                TELEPHONY_SERVICE);

getDeviceId()
将返回唯一的设备 ID。

String deviceId = telephonyManager.getDeviceId();

顺便说一句,这需要

android.permission.READ_PHONE_STATE

的许可
© www.soinside.com 2019 - 2024. All rights reserved.