This is a work in progress. View todos in our issues page for more information. Please submit PR!
Microsoft Azure Notification Hubs provide a multiplatform, scaled-out push infrastructure that enables you to send mobile push notifications from any backend (in the cloud or on-premises) to any mobile platform. To learn more, visit the Developer Center.
If you are new to Notification Hubs, you can get started by following the tutorials to push notifications to your apps.
To integrate your plugin into the Android part of your app, follow these steps:
-
Using the Firebase Console add an Android app to your project: Follow the assistant, download the generated google-services.json file and place it inside android/app.
-
Add your notification hub name and connection string to
android/app/src/main/AndroidManifest.xml
.
<meta-data
android:name="NotificationHubName"
android:value="" />
<meta-data
android:name="NotificationHubConnectionString"
android:value="Endpoint=..." />
- Add permissions to
android/app/src/main/AndroidManifest.xml
.
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
To integrate your plugin into the iOS part of your app, follow these steps:
-
Generate the certificates required by Apple for receiving push notifications following this guide in the Azure docs.
-
Register your app for push notifications with Apple following this guide in the Azure docs.
-
In Xcode, select Runner in the Project Navigator. In the Capabilities Tab turn on Push Notifications and Background Modes, and enable Background fetch and Remote notifications under Background Modes.
-
Add your notification hub name and connection string to
Info.plist
.
NotificationHubName
NotificationHubConnectionString
From your Dart code, you need to import the plugin and instantiate it:
import 'package:azure_notificationhubs_flutter/azure_notificationhubs_flutter.dart';
final AzureNotificationhubsFlutter _anh = AzureNotificationhubsFlutter();
Requesting permissions on iOS is managed by the plugin and the request will bring up a permissions dialog for the user to confirm on iOS on app launch.
Afterwards, you can listen to the notifications and write your own logic to handle extra data payloads.
_anh.configure(
onLaunch: (Map<String, dynamic> notification) async {
print('onLaunch: $notification');
},
onResume: (Map<String, dynamic> notification) async {
print('onResume: $notification');
},
onMessage: (Map<String, dynamic> notification) async {
print('onMessage: $notification');
},
onToken: (String token) async {
print('onToken: $token');
},
);
iOS and Android have different payloads. The entire payload will be sent to dart onResume, onLaunch, onMessage depending on the situation.
{
aps: {
alert: {
title: "Hello world",
body: "by chu"
},
badge: 1
},
<!-- extra data payload -->
...
}
Send the title as an empty string if it is not required.
{
"data": {
"title": "Hello world",
"body": "to you",
<!-- extra data payload -->
...
}
}
Every device is automatically subscribed to device:deviceID
. For Android, deviceId is a SHA1 hash of FirebaseCloudMessaging token because it exceeds the length limits of a tag.
Manual subscribing to tags is not supported as it is not my priority right now. Feel free to create a PR.
It's a feature, not a bug. In android, sometimes the user does not receive any heads up notifications and the notifications appear silently in the notification drawer. This is because heads up notifications have a built in rate limiting - if the user swipes your heads up notification up (putting it back into the notification tray) or to the side (dismissing it), then the system prevents further heads up notifications for some period of time.
To get the source code of our wrapper via git just type:
git clone https://github.com/rswiftoffice/azure-notificationhubs-flutter.git
If you're unsure about anything, just ask -- or submit the issue or pull request anyway. The worst that can happen is you'll be politely asked to change something. We love all friendly contributions.