简体   繁体   中英

How to get Android device token for push notifications?

We have been through various Stackoverflow questions and answers, and looked through documentation and articles but all the approaches we've tried such as FireBaseInstanceId and extending the FirebaseMessagingService all result in an empty token.

It is not clear how we get the token for the user's device, for push notification purposes.

Could someone please clarify how in 2021 we can get the user's device token?

Thanks

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);
    }

}

Add this in Android manifest file:

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

Whenever your Application is installed first time and open, MyFirebaseMessagingService created and onNewToken(String token) method called and token generated which is your Device Token or FCM Token.

from this way you can get the unique device id

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

getDeviceId() will returns the unique device ID.

String deviceId = telephonyManager.getDeviceId();

By the way this needs permission of android.permission.READ_PHONE_STATE

FireBaseInstanceId was deprecated and documentation say to use FirebaseMessaging for retrieve FCM token. In particular the method getToken() works in this way:

Returns the FCM registration token for this Firebase project. This creates a Firebase Installations ID, if one does not exist

So, in order to generate token, I don't think is mandatory to extends FirebaseMessagingService, just call it like so wherever you want

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

Once you have a sample push notification project working, then the Java code is:

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();
        }
    });

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM