Skip to content

Commit f24bad9

Browse files
committed
New implementation FirebaseMessaging.getToken
* New getTokenWithClassFirebaseMessaging method that uses the newer FirebaseMessaging.getToken() API added in firebase-messaging:21.0.0. * Since all apps may not have updated to firebase-messaging:21.0.0 or newer we are catching NoClassDefFoundError & NoSuchMethodError and falling back to FirebaseInstanceId.getToken
1 parent ab5236b commit f24bad9

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

OneSignalSDK/onesignal/src/main/java/com/onesignal/PushRegistratorFCM.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ String getProviderName() {
5757
@Override
5858
String getToken(String senderId) throws Throwable {
5959
initFirebaseApp(senderId);
60+
61+
try {
62+
return getTokenWithClassFirebaseMessaging();
63+
} catch (NoClassDefFoundError | NoSuchMethodError e) {
64+
// Class or method wil be missing at runtime if firebase-message older than 21.0.0 is used.
65+
OneSignal.Log(
66+
OneSignal.LOG_LEVEL.INFO,
67+
"FirebaseMessaging.getToken not found, attempting to use FirebaseInstanceId.getToken"
68+
);
69+
}
70+
71+
// Fallback for firebase-message versions older than 21.0.0
6072
return getTokenWithClassFirebaseInstanceId(senderId);
6173
}
6274

@@ -65,6 +77,17 @@ private String getTokenWithClassFirebaseInstanceId(String senderId) throws IOExc
6577
return instanceId.getToken(senderId, FirebaseMessaging.INSTANCE_ID_SCOPE);
6678
}
6779

80+
@WorkerThread
81+
private String getTokenWithClassFirebaseMessaging() throws ExecutionException, InterruptedException {
82+
// We use firebaseApp.get(FirebaseMessaging.class) instead of FirebaseMessaging.getInstance()
83+
// as the latter uses the default Firebase app. We need to use a custom Firebase app as
84+
// the senderId is provided at runtime.
85+
FirebaseMessaging fcmInstance = firebaseApp.get(FirebaseMessaging.class);
86+
// FirebaseMessaging.getToken API was introduced in firebase-messaging:21.0.0
87+
Task<String> tokenTask = fcmInstance.getToken();
88+
return Tasks.await(tokenTask);
89+
}
90+
6891
private void initFirebaseApp(String senderId) {
6992
if (firebaseApp != null)
7093
return;

0 commit comments

Comments
 (0)