又到了推薦好外掛的時候了。開發 APP 避免不了使用「推送」功能。比如,新上架一個商品,或者最新的一條體育新聞,實時推送給使用者。
比較了幾家推送平臺,貌似「極光」出了 Flutter 外掛,所以就拿它試試手,順便記錄下整個推送功能開發流程。
說到「推送」,自然有推送端和接收端,接收端自然包括 Android 端和 iOS 端。
demo
引入外掛:
flutter_jpush: ^0.0.4
複製程式碼
在 main.dart
加入初始化程式碼:
void _initJPush() async {
await FlutterJPush.startup();
print("初始化jpush成功");
// 獲取 registrationID
var registrationID =await FlutterJPush.getRegistrationID();
print(registrationID);
// 註冊接收和開啟 Notification()
_initNotification();
}
void _initNotification() async {
FlutterJPush.addReceiveNotificationListener(
(JPushNotification notification) {
print("收到推送提醒: $notification");
}
);
FlutterJPush.addReceiveOpenNotificationListener(
(JPushNotification notification) {
print("開啟了推送提醒: $notification");
}
);
}
複製程式碼
Android 配置
在極光後臺建立應用,生成 appkey 等資訊,Android 配置好說,新增包名即可。
在專案 Android 工程 build.gradle
程式碼中,增加配置資訊:
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.*.*"
minSdkVersion 16
targetSdkVersion 27
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "****", // 極光上註冊的包名對應的appkey.
JPUSH_CHANNEL : "developer-default",
]
}
複製程式碼
好了,我們先在極光後臺編寫一條訊息通知,看看效果。
當 APP 處於開啟狀態,通過命令好 log,我們能看到「收到推送提醒」:
同時,我們在通知欄上也能收到這條訊息推送通知:
開啟這條通知後,執行的是「addReceiveOpenNotificationListener」
就是這麼簡單。
iOS 配置
如何申請證照和籤權,具體看極光的說明:docs.jiguang.cn/jpush/clien…
需要注意的是,先在 Xcode 那開啟「Push Notifications」
在「iOS」工程下,新增極光配置資訊:
增加
#include "FlutterJPushPlugin.h"
增加
[self startupJPush:launchOptions appKey:@"你的key" channel:@"你的渠道" isProduction:是否生產版本];
複製程式碼
好了,配置之後,dart 端還是上面的同樣程式碼,還是利用極光的後臺,推送一條測試通知,看看效果:
開啟該通知後,也執行 print
了:
伺服器程式設計推送
只要訊息能到達客戶端,那具體怎麼使用,或者開啟客戶端跳轉到具體頁面,這些工作就好說了,此處就沒必要展開說了。
剩下的就是後臺介面推送通知了,總不能每次都要在「極光」後臺做推送吧!
所以我們需要藉助「極光」提供的介面了。
極光提供了多語言服務端 SDK,基本可以滿足我們的整合需要了。
我還是以 Laravel 為案例,簡要說一說整合。
1. composer.json
檔案中新增 jpush
依賴.
"jpush/jpush": "^3.5"
複製程式碼
2. 寫一個 demo 命令列推送服務:
Artisan::command('jpush', function () {
$client = new \JPush\Client($app_key, $master_secret);
})->describe('jpush');
複製程式碼
3. 傳送一個通知試試:
$client->push()
->setPlatform('all')
->addAllAudience()
->setNotificationAlert('你好, 極光推送')
->send();
複製程式碼
執行命令:php artisan jpush
看看:
okey,到目前為止,通過簡單的例子,就可以把從服務端到客戶端走通 Push 流程。
注:服務端 SDK 參考
總結
如果知道怎麼結合原生 Android 和 iOS 外掛整合到 Flutter 上,那使用極光推送,也可以不需要官方提供的 Flutter 外掛,相信你也能寫。
相反地,使用官方提供的 Flutter 外掛和整合文件,可以讓我們快速的完成 push 通知功能,可以讓我們更聚焦於我們的產品邏輯和功能上。