極光推送在國內的App的覆蓋率比較高,在第一時間就更新了對flutter
的支持,使用極光簡單配置後就能夠進行遠端推送和本地定時推送,很是方便。前端
推薦使用
android
進行測試,配置簡單,ios須要證書,相對比較複雜。我也是用的安卓端進行演示。
先到極光官網,註冊帳號,配置一下flutter
項目的包名,若是不記得了,能夠到flutter項目下的 android/app/build.gradle
中找一下,defaultConfig
下的 applicationId
就是包名,這個配置文件不要關,後續咱們還會再回來。android
在極光配置好安卓的包名後,咱們會獲得 AppKey,到這就算註冊完成。
ios
繼續打開,android/app/build.gradle
文件。後端
defaultConfig
中 minSdkVersion
修改成 17,flutter
建立後默認是16
,沒法使用極光推送。defaultConfig
中添加 manifestPlaceholders
。
下面是個人配置,你們根據本身的狀況修改便可:api
defaultConfig { applicationId "cn.idiocy66.fe_mp" // 包名 minSdkVersion 17 // 修改成17 targetSdkVersion 28 versionCode flutterVersionCode.toInteger() versionName flutterVersionName // 極光配置 manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "9bf4f58ea9471001e0a4d66d", // 極光中的appkey JPUSH_CHANNEL : "developer-default", // 默認便可. ] }
配置完成,能夠運行推送功能了。
使用極光推送功能前,必須先執行初始化函數:app
final JPush jpush = new JPush(); jpush.setup( appKey: "9bf4f58ea9471001e0a4d66d", // 極光中的appkey channel: "theChannel", production: false, debug: true, );
若是不進行初始化操做,在極光後臺沒法查詢到對應的機器信息,也就沒法使用推送功能。async
在同一個極光應用中,每一個設備都擁有惟一的一個id,用於身份驗證,後臺也能夠單獨向這個rid進行消息推送。函數
使用getRegistrationID
函數獲取當前設備的rid
:測試
jpush.getRegistrationID().then((rid) { print("當前設備的rid: ${rid}"); });
本地推送並不會收到極光的條數限制:gradle
var localNotification = LocalNotification( id: 234, title: "本地推送", buildId: 1, content: "😁 隨便寫點內容,時間 ${DateTime.now().toIso8601String()}", fireTime: DateTime.now(), // 當即發送 subtitle: "副標題 123456", badge: 1, extra: {"myInfo": "推送信息balabla"} // 攜帶數據 ); jpush.sendLocalNotification(localNotification);
定時本地推送,傳入DateTime,絕對時間。
// 3秒後進行本地推送 var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 3000); var localNotification = LocalNotification( id: 1, title: '定時推送', buildId: 1, content: '三秒後本地推送', fireTime: fireDate, subtitle: '子標題', badge: 5, extra: {"data": "附帶數據"} ); jpush.sendLocalNotification(localNotification);
遠程推送,咱們暫時可使用極光後臺進行,固然有後臺能力也能夠直接使用api調用。
默認優先級的消息不會彈窗顯示,須要調高優先級則能夠在屏幕頂部彈出。
跳轉到系統設置中的推送設置(當前應用),點擊返回能夠直接返回當前應用。
常常用於用戶關閉推送後的再提醒。
jpush.openSettingsForNotification();
一般須要和權限獲取相配合:
jpush.isNotificationEnabled().then((bool value) { // 返回是否開啓通知 });
當用戶禁止通知時,提示跳轉系統配置進行開啓通知操做。
推薦在 初始化函數 setup
前進行通知監控:
jpush.addEventHandler( onReceiveNotification: (Map<String, dynamic> message) async { print("接收到推送: $message"); }, onOpenNotification: (Map<String, dynamic> message) async { print("經過點擊推送進入app: $message"); }, onReceiveMessage: (Map<String, dynamic> message) async { print("接收到自定義消息: $message"); }, onReceiveNotificationAuthorization: (Map<String, dynamic> message) async { print("通知權限狀態: $message"); } );
推送和消息不一樣,推送是會顯示在設備通知欄中,而消息不會。
消息是由後端api發送給設備上的,不會有任何提示,只能靠這裏的監聽來接收。
ios 推送是須要用戶確認受權的,與安卓有差別,須要單獨調用
applyPushAuthority
方法,彈出受權。若是用戶不一樣意,後續沒法再次彈出,只能跳轉系統配置頁面開啓推送權限。
推送的強大不只如此,還有設置標籤
、設置別名
等功能,能夠將每一個用戶都進行精細劃分,作到更精準的推送。
更多內容歡迎關注公衆號:《前端拾遺》