diff --git a/README.md b/README.md index 47894c46..52c6ef76 100644 --- a/README.md +++ b/README.md @@ -162,135 +162,6 @@ By default the library saves information about channels and messages in a SQLite Set the property `persistenceEnabled` to false if you don't want to use the offline storage. -### Push notifications - -To enable push notifications set the property `pushNotificationsEnabled` to `true`. - -#### Android - -Follow the guide at [this link](https://pub.dev/packages/firebase_messaging#android-integration) to setup Firebase for Android. - -Set the notification template on your GetStream dashboard to be like this: -```json -template = {} - -data template = { - "message_id": "{{ message.id }}" -} -``` - -Create a Application.kt file to be like this: -```kotlin -class Application : FlutterApplication(), PluginRegistrantCallback { - override fun onCreate() { - super.onCreate() - FlutterFirebaseMessagingService.setPluginRegistrant(this) - } - - override fun registerWith(registry: PluginRegistry?) { - PathProviderPlugin.registerWith(registry?.registrarFor( - "io.flutter.plugins.pathprovider.PathProviderPlugin")) - SharedPreferencesPlugin.registerWith(registry?.registrarFor( - "io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin")) - FlutterLocalNotificationsPlugin.registerWith(registry?.registrarFor( - "com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin")) - FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin")) - } -} -``` - -Update the `AndroidManifest.xml` file to set the application class: -```xml -... - - - _handleAndroidNotification( - Map notification, -) async { - // get message information from the backend and store it in the offline storage - final notificationData = await NotificationService.getAndStoreMessage(notification); - - // define the android channel specifics - final androidPlatformChannelSpecifics = AndroidNotificationDetails( - 'Message notifications', - 'Message notifications', - 'Channel dedicated to message notifications', - importance: Importance.Max, - priority: Priority.High, - ); - - // define the appearance of the notification - final androidNotificationOptions = AndroidNotificationOptions( - androidNotificationDetails: androidPlatformChannelSpecifics, - id: notificationData.message.id.hashCode, - title: - 'CUSTOM ${notificationData.message.user.name} @ ${notificationData.channel.cid}', - body: notificationData.message.text, - ); - - // actually show the notification - await NotificationService.showNotification(androidNotificationOptions); -} -``` - -#### iOS - -Make sure you have correctly configured your app to support push notifications, and that you have generated certificate/token for sending pushes. - -##### Offline support and customizing notifications - -On iOS we need to create a notification service extension. - -Follow these points to configure it - -- open the XCode project -- create a new target of type `Notification service extension` -- add `App Groups` capability to the `Runner` target and the just created one and create one common group -- add the line `pod 'StreamChatClient'` to the Podfile -- run `pod install` -- substitute the code in the `Notification service` with [this one](https://gist.github.com/imtoori/d37611faefef036e1a6c017b1a09e91f) and substitute APPGROUP with the just created one -- do the same with `AppDelegate.swift` using [this template](https://gist.github.com/imtoori/f95b30f25b745c5f777bfff1085176ef) -- set the notification template on your GetStream dashboard to be like this: -```handlebars -template = { - "aps" : { - "alert" : { - "title" : "{{ sender.name }} @ {{ channel.name }}", - "body" : "{{ message.text }}" - }, - "badge": {{ unread_count }}, - "apns-priority": 10, - "mutable-content" : 1 - }, - "message_id": "{{ message.id }}" -} -``` -Of course you can change the `alert` object as you want. Just make sure it has the last three lines. - -To customize notifications on iOS you need to do it in the Notification service. - -There is no way of doing it using Dart code at the moment because of framework restrictions. - ## Contributing We welcome code changes that improve this library or fix a problem,