Skip to content

Commit 7275f6c

Browse files
authored
Merge pull request #122 from CatalystCode/phongcao/android-improvements
Improvements, bug fixes and release 0.9.4
2 parents 0e3649d + c688604 commit 7275f6c

15 files changed

+925
-326
lines changed

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeConstants.java

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,25 @@
33
public final class ReactNativeConstants {
44
// Notification
55
public static final String AZURE_NOTIFICATION_HUB_NAME = "AzureNotificationHub";
6-
public static final String NOTIF_REGISTER_AZURE_HUB_EVENT = "azureNotificationHubRegistered";
7-
public static final String NOTIF_AZURE_HUB_REGISTRATION_ERROR_EVENT = "azureNotificationHubRegistrationError";
8-
public static final String DEVICE_NOTIF_EVENT = "remoteNotificationReceived";
96
public static final String NOTIFICATION_CHANNEL_ID = "rn-push-notification-channel-id";
7+
public static final String KEY_NOTIFICATION_PAYLOAD_TYPE = "notification";
8+
public static final String KEY_DATA_PAYLOAD_TYPE = "data";
9+
10+
// Notification hub events
11+
public static final String EVENT_REMOTE_NOTIFICATION_RECEIVED = "remoteNotificationReceived";
12+
public static final String EVENT_AZURE_NOTIFICATION_HUB_REGISTERED = "azureNotificationHubRegistered";
13+
public static final String EVENT_AZURE_NOTIFICATION_HUB_REGISTERED_ERROR = "azureNotificationHubRegisteredError";
14+
15+
// Registration's keys
16+
public static final String KEY_REGISTRATION_CONNECTIONSTRING = "connectionString";
17+
public static final String KEY_REGISTRATION_HUBNAME = "hubName";
18+
public static final String KEY_REGISTRATION_SENDERID = "senderID";
19+
public static final String KEY_REGISTRATION_TAGS = "tags";
20+
public static final String KEY_REGISTRATION_CHANNELNAME = "channelName";
21+
public static final String KEY_REGISTRATION_CHANNELIMPORTANCE = "channelImportance";
22+
public static final String KEY_REGISTRATION_CHANNELSHOWBADGE = "channelShowBadge";
23+
public static final String KEY_REGISTRATION_CHANNELENABLELIGHTS = "channelEnableLights";
24+
public static final String KEY_REGISTRATION_CHANNELENABLEVIBRATION = "channelEnableVibration";
1025

1126
// Shared prefs used in NotificationHubUtil
1227
public static final String SHARED_PREFS_NAME = "com.azure.reactnative.notificationhub.NotificationHubUtil";
@@ -16,13 +31,15 @@ public final class ReactNativeConstants {
1631
public static final String KEY_FOR_PREFS_FCMTOKEN = "AzureNotificationHub_FCMToken";
1732
public static final String KEY_FOR_PREFS_TAGS = "AzureNotificationHub_Tags";
1833
public static final String KEY_FOR_PREFS_SENDERID = "AzureNotificationHub_senderID";
34+
public static final String KEY_FOR_PREFS_CHANNELNAME = "AzureNotificationHub_channelName";
1935
public static final String KEY_FOR_PREFS_CHANNELIMPORTANCE = "AzureNotificationHub_channelImportance";
2036
public static final String KEY_FOR_PREFS_CHANNELSHOWBADGE = "AzureNotificationHub_channelShowBadge";
2137
public static final String KEY_FOR_PREFS_CHANNELENABLELIGHTS = "AzureNotificationHub_channelEnableLights";
2238
public static final String KEY_FOR_PREFS_CHANNELENABLEVIBRATION = "AzureNotificationHub_channelEnableVibration";
2339

2440
// Remote notification payload
2541
public static final String KEY_REMOTE_NOTIFICATION_MESSAGE = "message";
42+
public static final String KEY_REMOTE_NOTIFICATION_BODY = "body";
2643
public static final String KEY_REMOTE_NOTIFICATION_ID = "google.message_id";
2744
public static final String KEY_REMOTE_NOTIFICATION_TITLE = "title";
2845
public static final String KEY_REMOTE_NOTIFICATION_PRIORITY = "google.original_priority";
@@ -46,6 +63,7 @@ public final class ReactNativeConstants {
4663
public static final String KEY_REMOTE_NOTIFICATION_TAG = "tag";
4764
public static final String KEY_REMOTE_NOTIFICATION_USER_INTERACTION = "userInteraction";
4865
public static final String KEY_REMOTE_NOTIFICATION_COLDSTART = "coldstart";
66+
public static final String KEY_REMOTE_NOTIFICATION_AVATAR_URL = "avatarUrl";
4967

5068
// Remote notification payload's priority
5169
public static final String REMOTE_NOTIFICATION_PRIORITY_MAX = "max";
@@ -54,8 +72,12 @@ public final class ReactNativeConstants {
5472
public static final String REMOTE_NOTIFICATION_PRIORITY_MIN = "min";
5573
public static final String REMOTE_NOTIFICATION_PRIORITY_NORMAL = "normal";
5674

57-
// Intent payload
58-
public static final String KEY_INTENT_NOTIFICATION = "notification";
75+
// Intent
76+
public static final String KEY_INTENT_EVENT_NAME = "eventName";
77+
public static final String KEY_INTENT_EVENT_TYPE = "eventType";
78+
public static final String KEY_INTENT_EVENT_STRING_DATA = "eventStringData";
79+
public static final String INTENT_EVENT_TYPE_STRING = "eventTypeString";
80+
public static final String INTENT_EVENT_TYPE_BUNDLE = "eventTypeBundle";
5981

6082
// Resources
6183
public static final String RESOURCE_DEF_TYPE_MIPMAP = "mipmap";
@@ -66,7 +88,6 @@ public final class ReactNativeConstants {
6688
// Errors
6789
public static final String ERROR_NO_ACTIVITY_CLASS = "No activity class found for the notification";
6890
public static final String ERROR_NO_MESSAGE = "No message specified for the notification";
69-
public static final String ERROR_NO_NOTIF_ID = "No notification ID specified for the notification";
7091
public static final String ERROR_COVERT_ACTIONS = "Exception while converting actions to JSON object.";
7192
public static final String ERROR_GET_ACTIONS_ARRAY = "Exception while getting action from actionsArray.";
7293
public static final String ERROR_SEND_PUSH_NOTIFICATION = "failed to send push notification";
@@ -81,6 +102,7 @@ public final class ReactNativeConstants {
81102
public static final String ERROR_NOTIFICATION_HUB = "E_NOTIFICATION_HUB";
82103
public static final String ERROR_NOT_REGISTERED = "E_NOT_REGISTERED";
83104
public static final String ERROR_NOT_REGISTERED_DESC = "No registration to Azure Notification Hub.";
105+
public static final String ERROR_FETCH_IMAGE = "Error while fetching image.";
84106

85107
private ReactNativeConstants() {
86108
}

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeFirebaseMessagingService.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ public static void createNotificationChannel(Context context) {
2323
if (notificationChannelID == null) {
2424
ReactNativeNotificationHubUtil notificationHubUtil = ReactNativeNotificationHubUtil.getInstance();
2525
ReactNativeNotificationChannelBuilder builder = ReactNativeNotificationChannelBuilder.Factory.create();
26+
27+
if (notificationHubUtil.hasChannelName(context)) {
28+
builder.setName(notificationHubUtil.getChannelName(context));
29+
}
30+
2631
if (notificationHubUtil.hasChannelImportance(context)) {
2732
builder.setImportance(notificationHubUtil.getChannelImportance(context));
2833
}
@@ -44,8 +49,10 @@ public static void createNotificationChannel(Context context) {
4449
NotificationChannel channel = builder.build();
4550
NotificationManager notificationManager = (NotificationManager) context.getSystemService(
4651
Context.NOTIFICATION_SERVICE);
47-
notificationManager.createNotificationChannel(channel);
48-
notificationChannelID = channel.getId();
52+
if (notificationManager != null) {
53+
notificationManager.createNotificationChannel(channel);
54+
notificationChannelID = channel.getId();
55+
}
4956
}
5057
}
5158
}
@@ -87,6 +94,7 @@ public void onMessageReceived(RemoteMessage remoteMessage) {
8794
} else {
8895
ReactNativeNotificationsHandler.sendNotification(this, bundle, notificationChannelID);
8996
}
97+
9098
ReactNativeNotificationsHandler.sendBroadcast(this, bundle, 0);
9199
}
92100
}

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeNotificationHubModule.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import com.facebook.react.bridge.ActivityEventListener;
1313
import com.facebook.react.bridge.LifecycleEventListener;
14-
import com.facebook.react.modules.core.DeviceEventManagerModule;
1514
import com.google.android.gms.common.ConnectionResult;
1615
import com.google.android.gms.common.GoogleApiAvailability;
1716

@@ -65,27 +64,27 @@ public boolean getIsForeground() {
6564
@ReactMethod
6665
public void register(ReadableMap config, Promise promise) {
6766
ReactNativeNotificationHubUtil notificationHubUtil = ReactNativeNotificationHubUtil.getInstance();
68-
String connectionString = config.getString("connectionString");
67+
String connectionString = config.getString(KEY_REGISTRATION_CONNECTIONSTRING);
6968
if (connectionString == null) {
7069
promise.reject(ERROR_INVALID_ARGUMENTS, ERROR_INVALID_CONNECTION_STRING);
7170
return;
7271
}
7372

74-
String hubName = config.getString("hubName");
73+
String hubName = config.getString(KEY_REGISTRATION_HUBNAME);
7574
if (hubName == null) {
7675
promise.reject(ERROR_INVALID_ARGUMENTS, ERROR_INVALID_HUBNAME);
7776
return;
7877
}
7978

80-
String senderID = config.getString("senderID");
79+
String senderID = config.getString(KEY_REGISTRATION_SENDERID);
8180
if (senderID == null) {
8281
promise.reject(ERROR_INVALID_ARGUMENTS, ERROR_INVALID_SENDER_ID);
8382
return;
8483
}
8584

8685
String[] tags = null;
87-
if (config.hasKey("tags") && !config.isNull("tags")) {
88-
ReadableArray tagsJson = config.getArray("tags");
86+
if (config.hasKey(KEY_REGISTRATION_TAGS) && !config.isNull(KEY_REGISTRATION_TAGS)) {
87+
ReadableArray tagsJson = config.getArray(KEY_REGISTRATION_TAGS);
8988
tags = new String[tagsJson.size()];
9089
for (int i = 0; i < tagsJson.size(); ++i) {
9190
tags[i] = tagsJson.getString(i);
@@ -98,23 +97,28 @@ public void register(ReadableMap config, Promise promise) {
9897
notificationHubUtil.setSenderID(reactContext, senderID);
9998
notificationHubUtil.setTags(reactContext, tags);
10099

101-
if (config.hasKey("channelImportance")) {
102-
int channelImportance = config.getInt("channelImportance");
100+
if (config.hasKey(KEY_REGISTRATION_CHANNELNAME)) {
101+
String channelName = config.getString(KEY_REGISTRATION_CHANNELNAME);
102+
notificationHubUtil.setChannelName(reactContext, channelName);
103+
}
104+
105+
if (config.hasKey(KEY_REGISTRATION_CHANNELIMPORTANCE)) {
106+
int channelImportance = config.getInt(KEY_REGISTRATION_CHANNELIMPORTANCE);
103107
notificationHubUtil.setChannelImportance(reactContext, channelImportance);
104108
}
105109

106-
if (config.hasKey("channelShowBadge")) {
107-
boolean channelShowBadge = config.getBoolean("channelShowBadge");
110+
if (config.hasKey(KEY_REGISTRATION_CHANNELSHOWBADGE)) {
111+
boolean channelShowBadge = config.getBoolean(KEY_REGISTRATION_CHANNELSHOWBADGE);
108112
notificationHubUtil.setChannelShowBadge(reactContext, channelShowBadge);
109113
}
110114

111-
if (config.hasKey("channelEnableLights")) {
112-
boolean channelEnableLights = config.getBoolean("channelEnableLights");
115+
if (config.hasKey(KEY_REGISTRATION_CHANNELENABLELIGHTS)) {
116+
boolean channelEnableLights = config.getBoolean(KEY_REGISTRATION_CHANNELENABLELIGHTS);
113117
notificationHubUtil.setChannelEnableLights(reactContext, channelEnableLights);
114118
}
115119

116-
if (config.hasKey("channelEnableVibration")) {
117-
boolean channelEnableVibration = config.getBoolean("channelEnableVibration");
120+
if (config.hasKey(KEY_REGISTRATION_CHANNELENABLEVIBRATION)) {
121+
boolean channelEnableVibration = config.getBoolean(KEY_REGISTRATION_CHANNELENABLEVIBRATION);
118122
notificationHubUtil.setChannelEnableVibration(reactContext, channelEnableVibration);
119123
}
120124

@@ -170,9 +174,9 @@ public void onHostResume() {
170174
if (activity != null) {
171175
Intent intent = activity.getIntent();
172176
if (intent != null) {
173-
Bundle bundle = intent.getBundleExtra(KEY_INTENT_NOTIFICATION);
177+
Bundle bundle = ReactNativeUtil.getBundleFromIntent(intent);
174178
if (bundle != null) {
175-
intent.removeExtra(KEY_INTENT_NOTIFICATION);
179+
ReactNativeUtil.removeNotificationFromIntent(intent);
176180
bundle.putBoolean(KEY_REMOTE_NOTIFICATION_FOREGROUND, false);
177181
bundle.putBoolean(KEY_REMOTE_NOTIFICATION_USER_INTERACTION, true);
178182
bundle.putBoolean(KEY_REMOTE_NOTIFICATION_COLDSTART, true);
@@ -194,7 +198,7 @@ public void onHostDestroy() {
194198

195199
@Override
196200
public void onNewIntent(Intent intent) {
197-
Bundle bundle = intent.getBundleExtra(KEY_INTENT_NOTIFICATION);
201+
Bundle bundle = ReactNativeUtil.getBundleFromIntent(intent);
198202
if (bundle != null) {
199203
bundle.putBoolean(KEY_REMOTE_NOTIFICATION_FOREGROUND, false);
200204
bundle.putBoolean(KEY_REMOTE_NOTIFICATION_USER_INTERACTION, true);
@@ -211,10 +215,7 @@ public class LocalBroadcastReceiver extends BroadcastReceiver {
211215
@Override
212216
public void onReceive(Context context, Intent intent) {
213217
if (getIsForeground()) {
214-
String event = intent.getStringExtra("event");
215-
String data = intent.getStringExtra("data");
216-
mReactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
217-
.emit(event, data);
218+
ReactNativeUtil.emitIntent(mReactContext, intent);
218219
}
219220
}
220221
}

android/src/main/java/com/azure/reactnative/notificationhub/ReactNativeNotificationHubUtil.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ public void setSenderID(Context context, String senderID) {
105105
setPref(context, KEY_FOR_PREFS_SENDERID, senderID);
106106
}
107107

108+
public String getChannelName(Context context) {
109+
return getPref(context, KEY_FOR_PREFS_CHANNELNAME);
110+
}
111+
112+
public void setChannelName(Context context, String channelName) {
113+
setPref(context, KEY_FOR_PREFS_CHANNELNAME, channelName);
114+
}
115+
116+
public boolean hasChannelName(Context context) {
117+
return hasKey(context, KEY_FOR_PREFS_CHANNELNAME);
118+
}
119+
108120
public int getChannelImportance(Context context) {
109121
return getPrefInt(context, KEY_FOR_PREFS_CHANNELIMPORTANCE);
110122
}

0 commit comments

Comments
 (0)