Skip to content

Commit 6445171

Browse files
authored
Merge pull request #1433 from OneSignal/feature/support-newtoken-with-bundle-hms
Add onNewToken with Bundle HMS method support
2 parents bbd8be1 + c72be26 commit 6445171

File tree

6 files changed

+56
-8
lines changed

6 files changed

+56
-8
lines changed

Examples/OneSignalDemo/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ dependencies {
7575
// Test local OneSignal SDK
7676
gmsImplementation(project(':onesignal'))
7777

78-
huaweiImplementation 'com.huawei.hms:push:5.0.0.300'
78+
huaweiImplementation 'com.huawei.hms:push:5.3.0.304'
7979
huaweiImplementation 'com.huawei.hms:location:4.0.0.300'
8080
// Omit Google / Firebase libraries for Huawei builds.
8181
huaweiImplementation(project(':onesignal')) {

Examples/OneSignalDemo/app/src/huawei/java/com/onesignal/sdktest/notification/HmsMessageServiceAppLevel.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.onesignal.sdktest.notification;
22

3+
import android.os.Bundle;
4+
35
import com.huawei.hms.push.HmsMessageService;
46
import com.huawei.hms.push.RemoteMessage;
57
import com.onesignal.OneSignal;
@@ -13,10 +15,20 @@ public class HmsMessageServiceAppLevel extends HmsMessageService {
1315
* This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing.
1416
*
1517
* @param token token
18+
* @param bundle bundle
1619
*/
1720
@Override
21+
public void onNewToken(String token, Bundle bundle) {
22+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "HmsMessageServiceAppLevel onNewToken refresh token:" + token + " bundle: " + bundle);
23+
24+
// Forward event on to OneSignal SDK
25+
OneSignalHmsEventBridge.onNewToken(this, token, bundle);
26+
}
27+
28+
@Deprecated
29+
@Override
1830
public void onNewToken(String token) {
19-
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "HMS onNewToken refresh token:" + token);
31+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "HmsMessageServiceAppLevel onNewToken refresh token:" + token);
2032

2133
// Forward event on to OneSignal SDK
2234
OneSignalHmsEventBridge.onNewToken(this, token);

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.onesignal;
22

3+
import android.os.Bundle;
4+
35
import com.huawei.hms.push.HmsMessageService;
46
import com.huawei.hms.push.RemoteMessage;
57

@@ -24,10 +26,22 @@ public class HmsMessageServiceOneSignal extends HmsMessageService {
2426
* When an app calls the getToken method to apply for a token from the server,
2527
* if the server does not return the token during current method calling, the server can return the token through this method later.
2628
* This method callback must be completed in 10 seconds. Otherwise, you need to start a new Job for callback processing.
29+
*
2730
* @param token token
31+
* @param bundle bundle
2832
*/
2933
@Override
34+
public void onNewToken(String token, Bundle bundle) {
35+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "HmsMessageServiceOneSignal onNewToken refresh token:" + token);
36+
37+
OneSignalHmsEventBridge.onNewToken(this, token, bundle);
38+
}
39+
40+
@Deprecated
41+
@Override
3042
public void onNewToken(String token) {
43+
OneSignal.onesignalLog(OneSignal.LOG_LEVEL.DEBUG, "HmsMessageServiceOneSignal onNewToken refresh token:" + token);
44+
3145
OneSignalHmsEventBridge.onNewToken(this, token);
3246
}
3347

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

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.onesignal;
22

33
import android.content.Context;
4+
import android.os.Bundle;
45

56
import androidx.annotation.NonNull;
7+
import androidx.annotation.Nullable;
68

79
import com.huawei.hms.push.RemoteMessage;
810

11+
import java.util.concurrent.atomic.AtomicBoolean;
12+
913
/**
1014
* If you have your own {@link com.huawei.hms.push.HmsMessageService} defined in your app please also
1115
* call {@link OneSignalHmsEventBridge#onNewToken} and {@link OneSignalHmsEventBridge#onMessageReceived}
@@ -16,9 +20,27 @@
1620
*/
1721
public class OneSignalHmsEventBridge {
1822

23+
private static final AtomicBoolean firstToken = new AtomicBoolean(true);
24+
25+
/**
26+
* Method used by last HMS push version 5.3.0.304 and upper
27+
*/
28+
public static void onNewToken(@NonNull Context context, @NonNull String token, @Nullable Bundle bundle) {
29+
if (firstToken.compareAndSet(true, false)) {
30+
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "OneSignalHmsEventBridge onNewToken - HMS token: " + token + " Bundle: " + bundle);
31+
PushRegistratorHMS.fireCallback(token);
32+
} else {
33+
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "OneSignalHmsEventBridge ignoring onNewToken - HMS token: " + token + " Bundle: " + bundle);
34+
}
35+
}
36+
37+
/**
38+
* This method is being deprecated
39+
* @see OneSignalHmsEventBridge#onNewToken(Context, String, Bundle)
40+
*/
41+
@Deprecated
1942
public static void onNewToken(@NonNull Context context, @NonNull String token) {
20-
OneSignal.Log(OneSignal.LOG_LEVEL.INFO, "HmsMessageServiceOneSignal.onNewToken - HMS token: " + token);
21-
PushRegistratorHMS.fireCallback(token);
43+
onNewToken(context, token, null);
2244
}
2345

2446
public static void onMessageReceived(@NonNull Context context, @NonNull RemoteMessage message) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,9 @@ private synchronized void getHMSTokenTask(@NonNull Context context, @NonNull Reg
6868
if (!TextUtils.isEmpty(pushToken)) {
6969
OneSignal.Log(LOG_LEVEL.INFO, "Device registered for HMS, push token = " + pushToken);
7070
callback.complete(pushToken, UserState.PUSH_STATUS_SUBSCRIBED);
71-
}
72-
else
71+
} else {
7372
waitForOnNewPushTokenEvent(callback);
73+
}
7474
}
7575

7676
private static void doTimeOutWait() {
@@ -82,7 +82,7 @@ private static void doTimeOutWait() {
8282

8383
// If EMUI 9.x or older getToken will always return null.
8484
// We must wait for HmsMessageService.onNewToken to fire instead.
85-
void waitForOnNewPushTokenEvent(@NonNull RegisteredHandler callback) {
85+
private void waitForOnNewPushTokenEvent(@NonNull RegisteredHandler callback) {
8686
doTimeOutWait();
8787
if (!callbackSuccessful) {
8888
OneSignal.Log(OneSignal.LOG_LEVEL.ERROR, "HmsMessageServiceOneSignal.onNewToken timed out.");

OneSignalSDK/unittest/src/test/java/com/onesignal/ShadowPushRegistratorHMS.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public static void doTimeOutWait() {
2323
if (backgroundSuccessful) {
2424
// prepare required since doTimeOutWait will be run from a new background thread.
2525
Looper.prepare();
26-
new HmsMessageServiceOneSignal().onNewToken(ShadowHmsInstanceId.DEFAULT_MOCK_HMS_TOKEN_VALUE);
26+
new HmsMessageServiceOneSignal().onNewToken(ShadowHmsInstanceId.DEFAULT_MOCK_HMS_TOKEN_VALUE, null);
2727
}
2828
}
2929
}

0 commit comments

Comments
 (0)