For convenience, you should use Mapp.js and MappEventEmmiter.js.
For the Initialization use method, this function should be first in your application :
Mapp.engage(sdkKey: string, googleProjectId: string, server: string, appID: string, tenantID: string); const App = () => { ... } |
@param {string} sdkID - The SDK ID for your account.
@param {string} googleProjectID - The Google project id from your Firebase console for the chosen app.
@param {string} server - The Server, which will be used for engagement, this info will be provided by account managers.
@param {string} tenantID - The ID which recognizes you at the Mapp Engage system, will be also provided by account managers.
iOS uses most information from AppoxeeCofig.plist as explained in the integration section, so you need to have that plist set up inside iOS project.
Server list:
L3
L3_US
EMC
EMC_US
CROC
const ready = await Mapp.isReady(); |
const registered = await Mapp.isDeviceRegistered(); |
Get device alias
let alias = await Mapp.getAlias(); |
Set device alias
Mapp.setAlias(”some alias”) |
Get device info
let deviceInfo = await Mapp.getDeviceInfo(); |
Check if the feature is enabled.
let enabled = await Mapp.isPushEnabled(); |
Disable or enable push.
await Mapp.setPushEnabled(false); // disable await Mapp.setPushEnabled(false); // enable |
Push message events are triggered when a push message is received, opened, dismissed, or when a silent push message is received.
Subscribe/listen for push events:
Mapp.addPushListener(pushMessage => { console.log(JSON.stringify(pushMessage)); Alert.alert('Push message event', JSON.stringify(pushMessage)); }); |
For iOS also is an available listener for rich messages:
Mapp.addRichMessagesListener((notification) => { console.log(JSON.stringify(notification)); Alert.alert(JSON.stringify(notification)) }); |
For a use-cases where clients needs to handle push messages on their own, or when using some additional push service (besides MAPP), then some additional setup needs to be done.
Multiple firebase services can not exist in the same aplication, it will rise conflicts and unpredictable behaviour. So, we need to disable default service from Mapp native part.
Open android folder and update the AndroidManifest.xml file:
<service android:name=".MessageService" android:exported="false" tools:node="remove"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> |
After that we disabled the default Mapp service for receiving and handling push messages, we need to provide another service for push messages. This can be done in 2 ways.
We can create in the native part, our service that will extend MessageService, and implement the required functionality.
public class MyMessageService extends MappMessagingService { @Override public void onCreate() { super.onCreate(); } @Override public void onMessageReceived(RemoteMessage remoteMessage) { if(remoteMessage.getData().containsKey("p")) { // handle Mapp push messages super.onMessageReceived(remoteMessage); }else{ // handle your own push messages } } @Override public void onNewToken(String s) { super.onNewToken(s); // subscribe on your own service with firebase token } } |
Every overridden method must call the super method in order for the underlying plugin works correctly. |
For this way of handling push messages, we can use react native plugins:
# Install & setup the app module yarn add @react-native-firebase/app # Install the messaging module yarn add @react-native-firebase/messaging |
For complete instructions on how to use the plugins above and install them, please visit the official documentation: https://rnfirebase.io/messaging/usage
After we have successfully completed the setup of the app and messaging plugins, we only need to forward Mapp’s push messages to the Mapp plugin:
import FBMessaging from '@react-native-firebase/messaging'; ... const handleFirebasePushMessage = async (remoteMessage) => { let isFromMapp = await Mapp.isPushFromMapp(remoteMessage); if(isFromMapp){ Mapp.setRemoteMessage(remoteMessage); }else{ // handle push messages from other services } }; ... // to recevive and handle push messages when application is in a background/quit state FBMessaging().setBackgroundMessageHandler(handleFirebasePushMessage); // to receive and handle push messages when application is in a foreground state FBMessaging().onMessage(handleFirebasePushMessage); |
and also needs to forward Firebase device token
const token = await FBMessaging().getToken(); Mapp.setToken(token); // forward Firebase token to a Mapp plugin |
@param{RemoteMessage} remoteMessage - message received from firebase messaging service.
let isFromMapp = await Mapp.isPushFromMapp(remoteMessage); |
@param{String} token - token generated from Firebase Messaging instance.
Mapp.setToken(token); |
@param{RemoteMessage} remoteMessage - message received from firebase messaging service.
Mapp.setRemoteMessage(remoteMessage); |
@param{boolean} pushEnabled
- while logging out sets push the state
Mapp.logOut(pushEnabled) |
Retrieving tags:
Mapp.getTags().then(data => { Alert.alert(JSON.stringify(data)) }); |
Adding a tag:
@param{string
} tag - channel tag
Mapp.addTag("tagName"); |
Removing tag:
@param{string
} tag - channel tag
Mapp.removeTag("tagName"); |
Set a string value for a key.
@param {string} key - A key to be paired with the value.
@param {string} value - A value which contains string.
Mapp.setAttributeString("some key", "some value"); |
Set a number value for a key.
@param {string} key - A key to be paired with the value.
@param {number} value - A value which contains a number, i.e. "34", "34.54".
Mapp.setAttributeInt("some key", 34); |
Set a boolean for a key.
@param {string} key - A key to be paired with the value.
@param {boolean} value - true, false
Mapp.setAttributeBollean("some key", true); |
To get inbox messages use Mapp.fetchInboxMessage()
Mapp.fetchInboxMessage().then(data => { if (Platform.OS == "ios") { Mapp.addInboxMessagesListener( (messages) => { Alert.alert(JSON.stringify(messages)) }); } else { Alert.alert(JSON.stringify(data)) } |
iOS uses events for inbox messages (Mapp.addInboxMessagesListener
)and cannot return them as promise.
Show In-App message
The method triggers an In-App message.
@param {string} event-specific DCM event trigger.
Mapp.triggerInApp("app_open") |
Inapp messages can be marked as read, unread or deleted.
@param{number} templateId
@param{string} eventId
Mapp.inAppMarkAsRead(templateId: number, eventId: string); Mapp.inAppMarkAsUnRead(templateId: number, eventId: string); Mapp.inAppMarkAsDeleted(templateId: number, eventId: string); |
The location manager will be enabled and it will collect the location change events.
Mapp.startGeoFencing() |
The location manager will be disabled.
Mapp.stopGeoFencing() |