Mobile Messaging SDK is designed and developed to easily enable push notification channel in your mobile application. In almost no time of implementation you get push notification in your application and access to the features of Infobip IP Messaging Platform. The document describes library integration steps for your Cordova project.
- cordova 12.0.0 (
sudo npm install -g cordova
) - npm (version 8.13.x or higher)
- node (version 16.10.0 or higher)
For iOS project:
- Xcode 15
- Carthage >= 0.39.0 (
brew install carthage
) - Minimum deployment target 12.0
- [email protected]
- Ruby (2.7.x - 3.1.x)
For Android project:
- Android Studio
- Supported API Levels: 22 ( Android 5.1 - Lollipop) - 34 (Android 14.0)
- [email protected]
For Huawei:
- Android Studio
- Installed AppGallery with HMS Core at device
- Supported API Levels: 22 ( Android 5.1 - Lollipop) - 31 (Android 12.0)
This guide is designed to get you up and running with Mobile Messaging SDK plugin for Cordova:
-
Make sure to setup application at Infobip portal, if you haven't already.
-
Add MobileMessaging plugin to your project, run in terminal:
$ cordova plugin add com-infobip-plugins-mobilemessaging --save
You can add typings if you are using TypeScript in yours project
npm install --save-dev @types/mobile-messaging-cordova
expand to see Ionic code
ionic cordova plugin add com-infobip-plugins-mobilemessaging --save npm install @awesome-cordova-plugins/mobile-messaging --save
-
Configure platforms
- iOS: Integrate Notification Service Extension into your app in order to obtain:
- more accurate processing of messages and delivery stats
- support of rich notifications on the lock screen
- Android:
- Get the Firebase configuration file (google-services.json) as described in
Firebase documentation
and put it to the root application folder. - Add following to your config.xml
<platform name="android"> <resource-file src="google-services.json" target="app/google-services.json" /> <preference name="GradlePluginGoogleServicesEnabled" value="true"/> ... </platform>
- Get the Firebase configuration file (google-services.json) as described in
Starting from Android 13, Google requires to ask user for notification permission. Follow this guide to make a permission request.
- iOS: Integrate Notification Service Extension into your app in order to obtain:
-
Configure Huawei build
-
Configure Huawei application
-
Change
plaform/android/build.gradle
buildscript { repositories { mavenCentral() google() maven { url 'https://developer.huawei.com/repo/' } // Added for Huawei support } dependencies { ... classpath 'com.huawei.agconnect:agcp:1.6.0.300' // Added for Huawei support } } allprojects { repositories { mavenCentral() google() maven {url 'https://developer.huawei.com/repo/'} // Added for Huawei support } ... }
-
Change
plaform/android/app/build.gradle
apply plugin: 'com.android.application' apply plugin: 'com.huawei.agconnect' // Added for Huawei support dependencies { implementation 'com.huawei.hms:push:6.3.0.302' // Added for Huawei support }
-
Sign your app to provide config for Generated Signing Certificate Fingerprint at previous step. You can change
plaform/android/app/build.gradle
or write sign config tobuild.json
android { signingConfigs { release { storeFile file(<path to *.jks file>) storePassword "<password>" keyAlias "<alias>" keyPassword "<password>" } } buildTypes { release { signingConfig signingConfigs.release } debug { signingConfig signingConfigs.release } } ...
-
Download
agconnect-services.json
from AppGallery Connect and copy it toplatforms/android/app
.a. Find your App from the list and click the link under Android App in the Mobile phone column.
b. Go to Develop > Overview.
c. In the App information area, Click
agconnect-services.json
to download the configuration file. -
Add
Huawei App ID
via plugin variable inconfig.xml
:<plugin name="com-infobip-plugins-mobilemessaging" spec="..."> <variable name="HUAWEI_SENDER_ID" value="Huawei App ID" /> </plugin>
You can take this value from
agconnect-services.json
. -
Remove, if following was added to
config.xml
<platform name="android"> <resource-file src="google-services.json" target="app/google-services.json" /> <preference name="GradlePluginGoogleServicesEnabled" value="true"/> ... </platform>
-
Run
cordova build android --hms
to make build for HMS.Note that if you are developing / testing FCM and HMS at the same device then better to remove cache for installed app, remove app and after that install build with other push cloud.
-
-
Add code to your project to initialize the library after
deviceready
event with configuration options and library event listener:onDeviceReady: function () { ... MobileMessaging.init({ applicationCode: '<your_application_code>', geofencingEnabled: '<true/false>', ios: { notificationTypes: ['alert', 'badge', 'sound'] }, android: { notificationIcon: <String; a resource name for a status bar icon (without extension), located in '/platforms/android/app/src/main/res/mipmap'>, multipleNotifications: <Boolean; set to 'true' to enable multiple notifications>, notificationAccentColor: <String; set to hex color value in format '#RRGGBB' or '#AARRGGBB'> } }, function(error) { console.log('Init error: ' + error.description); } ); MobileMessaging.register('messageReceived', function(message) { console.log('Message Received: ' + message.body); } ); ... }
expand to see Ionic code
import { MobileMessaging } from '@ionic-native/mobile-messaging/ngx'; ... @NgModule({ ... providers: [ ... MobileMessaging ... ] ... }) export class AppModule { }
import {Message, MobileMessaging, UserData} from '@ionic-native/mobile-messaging/ngx'; ... @Component({ selector: 'app-root', templateUrl: 'app.component.html', styleUrls: ['app.component.scss'] }) export class AppComponent { constructor( private platform: Platform, private splashScreen: SplashScreen, private statusBar: StatusBar, private mobileMessaging: MobileMessaging ) { this.initializeApp(); } ... this.mobileMessaging.init({ applicationCode: '<your_application_code>', geofencingEnabled: '<true/false>', ios: { notificationTypes: ['alert', 'badge', 'sound'] }, android: { notificationIcon: <String; a resource name for a status bar icon (without extension), located in '/platforms/android/app/src/main/res/mipmap'>, multipleNotifications: <Boolean; set to 'true' to enable multiple notifications>, notificationAccentColor: <String; set to hex color value in format '#RRGGBB' or '#AARRGGBB'> }}, (err) => { ... }); this.mobileMessaging.register('messageReceived', function (message: any) { ... });
MobileMessaging.init({
applicationCode: <String; Infobip Application Code from the Customer Portal obtained in step 2>,
ios: {
notificationTypes: <Array; values: 'alert', 'badge', 'sound'; notification types to indicate how the app should alert user when push message arrives>
},
android: { // optional
notificationIcon: <String; a resource name for a status bar icon (without extension), located in '/platforms/android/app/src/main/res/mipmap'>,
multipleNotifications: <Boolean; set to 'true' to enable multiple notifications>,
notificationAccentColor: <String; set to hex color value in format '#RRGGBB' or '#AARRGGBB'>
},
geofencingEnabled: <Boolean; set to 'true' to enable geofencing inside the library>, // optional
messageStorage: <Object; message storage implementation>, // optional
defaultMessageStorage: <Boolean; set to 'true' to enable default message storage implementation>, // optional
notificationCategories: [ // optional
{
identifier: <String; a unique category string identifier>,
actions: [
{
identifier: <String; a unique action identifier>,
title: <String; an action title, represents a notification action button label>,
foreground: <Boolean; to bring the app to foreground or leave it in background state (or not)>,
textInputPlaceholder: <String; custom input field placeholder>,
moRequired: <Boolean; to trigger MO message sending (or not)>,
// iOS only
authenticationRequired: <Boolean; to require device to be unlocked before performing (or not)>,
destructive: <Boolean; to be marked as destructive (or not)>,
textInputActionButtonTitle: <String; custom label for a sending button>,
// Android only
icon:
<String; a resource name for a special action icon>
}
]
}
],
privacySettings: { // optional
carrierInfoSendingDisabled: <Boolean; defines if MM SDK should send carrier information to the server; false by default>,
systemInfoSendingDisabled: <Boolean; defines if MM SDK should send system information to the server; false by default>,
userDataPersistingDisabled: <Boolean; defines if MM SDK should persist User Data locally. Persisting user data locally gives you quick access to the data and eliminates a need to implement the persistent storage yourself; false by default>
}
},
function(error) {
console.log('Init error: ' + error.description);
}
);
More details on SDK features and FAQ you can find on Wiki
NEXT STEPS: Users and installations
If you have any questions or suggestions, feel free to send an email to [email protected] or create an issue. |
---|