Integrate your React Native Android app
This article provides information on how to install and set up Blueshift's Android SDK and integrate your React Native app with our platform.
1. SDK Integration
Install Blueshift's Android SDK
To install the Blueshift Android SDK, add the following line to the app level build.gradle
file. To get the latest version, check the releases page on GitHub.
implementation "com.blueshift:android-sdk-x:$sdkVersion"
Install Firebase Cloud Messaging
Blueshift uses Firebase Messaging to send push messages. Integrate Firebase Messaging into the project in case it is not already integrated.
If this is the first time that you are integrating FCM with your application, add the following lines of code into the AndroidManifest.xml
file. This code enables the Blueshift Android SDK to receive the push notification sent from Blueshift servers via Firebase.
<service
android:name="com.blueshift.fcm.BlueshiftMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
If you have an existing FCM integration, let your FirebaseMessagingService
class extend BlueshiftMessagingService
. This enables the Blueshift Android SDK to receive the push notification sent from Blueshift servers via Firebase.
package com.blueshift.reads.advanced;
import com.blueshift.fcm.BlueshiftMessagingService;
import com.blueshift.util.BlueshiftUtils;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class CustomMessagingServiceJava extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (BlueshiftUtils.isBlueshiftPushMessage(remoteMessage)) {
BlueshiftMessagingService.handleMessageReceived(this, remoteMessage);
} else {
// The push message does not belong to Blueshift. Please handle it here.
}
}
@Override
public void onNewToken(String newToken) {
BlueshiftMessagingService.handleNewToken(newToken);
// Use the new token in your app if needed.
}
}
package com.blueshift.reads.advanced
import com.blueshift.fcm.BlueshiftMessagingService
import com.blueshift.util.BlueshiftUtils
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class CustomMessagingServiceKotlin : FirebaseMessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
if (BlueshiftUtils.isBlueshiftPushMessage(remoteMessage)) {
BlueshiftMessagingService.handleMessageReceived(this, remoteMessage)
} else {
// The push message does not belong to Blueshift. Please handle it here.
}
}
override fun onNewToken(newToken: String) {
BlueshiftMessagingService.handleNewToken(newToken)
// Use the new token in your app if needed.
}
}
Permissions
Add the following permissions to the AndroidManifest.xml
file.
<!-- Internet permission is required to send events,
get notifications and in-app messages. -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- Network state access permission is required to detect changes
in network connection to schedule sync operations. -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Location access permission is required if you want to track the
location of the user. You can skip this step if you don't want to
track the user location. -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Initialize the Native SDK
Open the MainApplication.java
file and import the following classes.
import com.blueshift.model.Configuration;
import com.blueshift.Blueshift;
Add the following lines inside the onCreated()
method of MainApplication
class to initialize the Blueshift SDK.
Configuration configuration = new Configuration();
// Set Blueshift event API key
configuration.setApiKey(YOUR_EVENT_API_KEY);
// Set device-id source to Instance Id and package name combo (highly recommended)
configuration.setDeviceIdSource(Blueshift.DeviceIdSource.INSTANCE_ID_PKG_NAME);
Blueshift.getInstance(this).initialize(configuration);
To know more about the other optional configurations, see Optional configurations.
2. Push Notifications
Push notifications are enabled by default. You should be able to receive push notifications by now if you have followed the steps so far.
To enable deeplinking from push notifications, complete the following steps.
Open the MainActivity.java
file and import the following classes.
import android.content.Intent;
import android.os.Bundle;
import com.blueshift.reactnative.BlueshiftReactNativeModule;
Add the following code inside the MainActivity
class to handle push notification deeplinks.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BlueshiftReactNativeModule.processBlueshiftPushUrl(getIntent());
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
BlueshiftReactNativeModule.processBlueshiftPushUrl(getIntent());
}
3. In-app messaging
By default, In-app messages are disabled in the SDK. You must enable it explicitly by using the Blueshift config during SDK initialization.
Add the following lines before calling the initialize method mentioned in the "Initialize the Native SDK" section above.
// Enable in-app messages
configuration.setInAppEnabled(true);
configuration.setJavaScriptForInAppWebViewEnabled(true);
By default, the time interval between two in-app messages is one minute. You can use the following method to change this interval during the SDK initialization.
configuration.setInAppInterval(1000 * 60 * 2); // This will set the interval to two minutes.
In-app display options
The app must register/whitelist its pages/screens to show in-app messages.
1. Show on all pages
To whitelist all pages/screens, use ActivityLifecycleCallback
as shown.
public class YourApplication extends Application implements Application.ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
}
@Override
public void onActivityStarted(@NonNull Activity activity) {
Blueshift.getInstance(activity).registerForInAppMessages(activity);
}
@Override
public void onActivityResumed(@NonNull Activity activity) {
}
@Override
public void onActivityPaused(@NonNull Activity activity) {
}
@Override
public void onActivityStopped(@NonNull Activity activity) {
Blueshift.getInstance(activity).unregisterForInAppMessages(activity);
}
@Override
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
}
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
}
}
2. Show on selected pages
To register selected screens of the react native application, use the following methods in the respective callbacks.
componentDidMount() {
// Register for in-app notification
Blueshift.registerForInAppMessage("ScreenName");
}
componentWillUnmount() {
// Unregister for in-app notification
Blueshift.unregisterForInAppMessage();
}
4. Mobile Inbox
As mobile inbox stores the in-app notifications for later use. To enable the feature, add the following line to the SDK initialization code.
configuration.setInboxEnabled(true);
Add the following lines to the MainActivity.java
to help the Blueshift Native Module send updates to the React Native app when the mobile inbox data changes.
@Override
protected void onStart() {
super.onStart();
BlueshiftReactNativeModule.registerForInboxDataChangeEvents(this);
}
@Override
protected void onStop() {
BlueshiftReactNativeModule.unregisterForInboxDataChangeEvents(this);
super.onStop();
}
5. Blueshift Deep Links
Blueshift’s deep links are usual https URLs that take users to an installed app or a web browser to show the content. If an email or text message that is sent as a part of a campaign contains Blueshift deep links and a user clicks on it, the OS launches the installed app and Blueshift SDK delivers the deep link to the app to navigate the user to the respective screen.
To enable domain verification, follow the steps mentioned in the Prerequisite section in the Integrate Blueshift's deep links' document.
To open the app when someone clicks the link, add the following intent filter to the <activity>
tag for your MainActivity
inside your AndroidManifest.xml
file. Ensure that you replace links.clientdomain.com
with your email domain name.
<intent-filter
android:autoVerify="true"
tools:targetApi="m">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="links.clientdomain.com"
android:pathPrefix="/track"
android:scheme="https" />
<data
android:host="links.clientdomain.com"
android:pathPrefix="/z"
android:scheme="https" />
</intent-filter>
Logging
To verify the SDK integration, enable logging and view the events that are being sent to the Blueshift APIs.
Open the MainActivity.java
file and import the following class.
import com.blueshift.BlueshiftLogger;
To enable SDK logs, add the following lines before the SDK initialization code.
// Enable logging to view SDK logs in logcat window.
if (BuildConfig.DEBUG) {
// You must disable logging in production.
BlueshiftLogger.setLogLevel(BlueshiftLogger.VERBOSE);
}
Updated 9 months ago