diff --git a/README.md b/README.md index e02f2a16..f42cc4ee 100644 --- a/README.md +++ b/README.md @@ -173,31 +173,61 @@ apply from: file("../../node_modules/@react-native-community/cli-platform-androi - Create `MainNotificationService.java` inside your app directory(`com.example.app`) with below content: ***Remember to replace `package com.example.app;`, with your app package name*** + - Default Notification Behavior (Goes back to the parent default launcher activity when the user taps the notification): -```java -package com.example.app; + ```java + package com.example.app; -import com.google.firebase.messaging.FirebaseMessagingService; -import com.google.firebase.messaging.RemoteMessage; -import com.intercom.reactnative.IntercomModule; + import com.google.firebase.messaging.FirebaseMessagingService; + import com.google.firebase.messaging.RemoteMessage; + import com.intercom.reactnative.IntercomModule; -public class MainNotificationService extends FirebaseMessagingService { + public class MainNotificationService extends FirebaseMessagingService { - @Override - public void onNewToken(String refreshedToken) { - IntercomModule.sendTokenToIntercom(getApplication(), refreshedToken); - //DO LOGIC HERE - } + @Override + public void onNewToken(String refreshedToken) { + IntercomModule.sendTokenToIntercom(getApplication(), refreshedToken); + //DO LOGIC HERE + } - public void onMessageReceived(RemoteMessage remoteMessage) { - if (IntercomModule.isIntercomPush(remoteMessage)) { - IntercomModule.handleRemotePushMessage(getApplication(), remoteMessage); - } else { - // HANDLE NON-INTERCOM MESSAGE + public void onMessageReceived(RemoteMessage remoteMessage) { + if (IntercomModule.isIntercomPush(remoteMessage)) { + IntercomModule.handleRemotePushMessage(getApplication(), remoteMessage); + } else { + // HANDLE NON-INTERCOM MESSAGE + } + } } - } -} -``` + ``` + + - Custom Stack: + + ```java + package com.example.app; + + import com.google.firebase.messaging.FirebaseMessagingService; + import com.google.firebase.messaging.RemoteMessage; + import com.intercom.reactnative.IntercomModule; + + public class MainNotificationService extends FirebaseMessagingService { + + @Override + public void onNewToken(String refreshedToken) { + IntercomModule.sendTokenToIntercom(getApplication(), refreshedToken); + //DO LOGIC HERE + } + + public void onMessageReceived(RemoteMessage remoteMessage) { + if (IntercomModule.isIntercomPush(remoteMessage)) { + TaskStackBuilder customStack = TaskStackBuilder.create(getApplication()); + customStack.addNextIntent(new Intent(getApplication(), MainActivity.class)); // Replace with your custom activity + IntercomModule.handleRemotePushWithCustomStack(getApplication(), remoteMessage, customStack); + } else { + // HANDLE NON-INTERCOM MESSAGE + } + } + } + ``` - Edit `AndroidManifest.xml`. Add below content inside `` below `` diff --git a/android/build.gradle b/android/build.gradle index 20c7ba0b..6a26399d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -69,5 +69,5 @@ dependencies { //noinspection GradleDynamicVersion implementation "com.facebook.react:react-native:+" // From node_modules implementation "com.google.firebase:firebase-messaging:${safeExtGet('firebaseMessagingVersion', '20.2.+')}" - implementation 'io.intercom.android:intercom-sdk:17.0.3' + implementation 'io.intercom.android:intercom-sdk:17.1.0' } diff --git a/android/src/main/java/com/intercom/reactnative/IntercomModule.java b/android/src/main/java/com/intercom/reactnative/IntercomModule.java index a18736b5..a5cbf777 100644 --- a/android/src/main/java/com/intercom/reactnative/IntercomModule.java +++ b/android/src/main/java/com/intercom/reactnative/IntercomModule.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.app.Application; +import android.content.Intent; import android.util.Log; import android.widget.Toast; @@ -37,6 +38,7 @@ import io.intercom.android.sdk.helpcenter.sections.HelpCenterCollectionContent; import io.intercom.android.sdk.identity.Registration; import io.intercom.android.sdk.push.IntercomPushClient; +import android.app.TaskStackBuilder; @ReactModule(name = IntercomModule.NAME) public class IntercomModule extends ReactContextBaseJavaModule { @@ -65,11 +67,25 @@ public static boolean isIntercomPush(RemoteMessage remoteMessage) { } } - public static void handleRemotePushMessage(@NonNull Application application, RemoteMessage - remoteMessage) { + public static void handleRemotePushWithCustomStack(@NonNull Application application, RemoteMessage remoteMessage, + TaskStackBuilder customStack) { try { - Map message = remoteMessage.getData(); - intercomPushClient.handlePush(application, message); + Map message = remoteMessage.getData(); + intercomPushClient.handlePushWithCustomStack(application, message, customStack); + } catch (Exception err) { + Log.e(NAME, "handlePushWithCustomStack error:"); + Log.e(NAME, err.toString()); + } + } + + public static void handleRemotePushMessage(@NonNull Application application, RemoteMessage remoteMessage) { + try { + TaskStackBuilder customStack = TaskStackBuilder.create(application); + Intent launchIntent = application.getPackageManager().getLaunchIntentForPackage(application.getPackageName()); + if (launchIntent != null) { + customStack.addNextIntent(launchIntent); + } + handleRemotePushWithCustomStack(application, remoteMessage, customStack); } catch (Exception err) { Log.e(NAME, "handleRemotePushMessage error:"); Log.e(NAME, err.toString()); @@ -107,8 +123,7 @@ public void sendTokenToIntercom(@NonNull String token, Promise promise) { Log.e(NAME, "no current activity"); } - } catch ( - Exception err) { + } catch (Exception err) { Log.e(NAME, "sendTokenToIntercom error:"); Log.e(NAME, err.toString()); promise.reject(IntercomErrorCodes.SEND_TOKEN_TO_INTERCOM, err.toString()); @@ -117,24 +132,25 @@ public void sendTokenToIntercom(@NonNull String token, Promise promise) { @ReactMethod public void loginUnidentifiedUser(Promise promise) { - Intercom.client().loginUnidentifiedUser(new IntercomStatusCallback() { - @Override - public void onSuccess() { - promise.resolve(true); - } + Intercom.client().loginUnidentifiedUser(new IntercomStatusCallback() { + @Override + public void onSuccess() { + promise.resolve(true); + } - @Override - public void onFailure(@NonNull IntercomError intercomError) { - Log.e("ERROR", intercomError.getErrorMessage()); - promise.reject(String.valueOf(intercomError.getErrorCode()), intercomError.getErrorMessage()); - } - }); + @Override + public void onFailure(@NonNull IntercomError intercomError) { + Log.e("ERROR", intercomError.getErrorMessage()); + promise.reject(String.valueOf(intercomError.getErrorCode()), intercomError.getErrorMessage()); + } + }); } @ReactMethod public void loginUserWithUserAttributes(ReadableMap params, Promise promise) { Boolean hasEmail = params.hasKey("email") && IntercomHelpers.getValueAsStringForKey(params, "email").length() > 0; - Boolean hasUserId = params.hasKey("userId") && IntercomHelpers.getValueAsStringForKey(params, "userId").length() > 0; + Boolean hasUserId = params.hasKey("userId") + && IntercomHelpers.getValueAsStringForKey(params, "userId").length() > 0; Registration registration = null; if (hasEmail && hasUserId) { String email = IntercomHelpers.getValueAsStringForKey(params, "email"); @@ -181,19 +197,19 @@ public void setUserHash(String userHash, Promise promise) { @ReactMethod public void updateUser(ReadableMap params, Promise promise) { - UserAttributes userAttributes = IntercomHelpers.buildUserAttributes(params); - Intercom.client().updateUser(userAttributes, new IntercomStatusCallback() { - @Override - public void onSuccess() { - promise.resolve(true); - } + UserAttributes userAttributes = IntercomHelpers.buildUserAttributes(params); + Intercom.client().updateUser(userAttributes, new IntercomStatusCallback() { + @Override + public void onSuccess() { + promise.resolve(true); + } - @Override - public void onFailure(@NonNull IntercomError intercomError) { - Log.e("ERROR", intercomError.getErrorMessage()); - promise.reject(String.valueOf(intercomError.getErrorCode()), intercomError.getErrorMessage()); - } - }); + @Override + public void onFailure(@NonNull IntercomError intercomError) { + Log.e("ERROR", intercomError.getErrorMessage()); + promise.reject(String.valueOf(intercomError.getErrorCode()), intercomError.getErrorMessage()); + } + }); } @ReactMethod @@ -358,7 +374,6 @@ public void presentContent(ReadableMap params, Promise promise) { } } - @ReactMethod public void fetchHelpCenterCollections(Promise promise) { try { @@ -400,7 +415,8 @@ public void fetchHelpCenterCollection(String collectionId, Promise promise) { CollectionContentRequestCallback collectionContentCallback = new CollectionContentRequestCallback() { @Override public void onComplete(@NotNull HelpCenterCollectionContent helpCenterCollectionContent) { - promise.resolve(IntercomHelpCenterHelpers.parseHelpCenterCollectionsContentToReadableMap(helpCenterCollectionContent)); + promise.resolve( + IntercomHelpCenterHelpers.parseHelpCenterCollectionsContentToReadableMap(helpCenterCollectionContent)); } @Override @@ -435,7 +451,8 @@ public void searchHelpCenter(String searchTerm, Promise promise) { SearchRequestCallback collectionContentCallback = new SearchRequestCallback() { @Override public void onComplete(@NotNull List helpCenterArticleSearchResult) { - promise.resolve(IntercomHelpCenterHelpers.parseHelpCenterArticleSearchToReadableArray(helpCenterArticleSearchResult)); + promise.resolve( + IntercomHelpCenterHelpers.parseHelpCenterArticleSearchToReadableArray(helpCenterArticleSearchResult)); } @Override diff --git a/package.json b/package.json index 58bef29d..11e8462e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@intercom/intercom-react-native", - "version": "8.7.0", + "version": "8.8.0", "description": "React Native wrapper to bridge our iOS and Android SDK", "main": "lib/commonjs/index", "module": "lib/module/index",