Flutter 使用極光推送進行api和本地定時推送

極光推送在國內的App的覆蓋率比較高,在第一時間就更新了對flutter的支持,使用極光簡單配置後就能夠進行遠端推送和本地定時推送,很是方便。前端

推薦使用 android進行測試,配置簡單,ios須要證書,相對比較複雜。我也是用的安卓端進行演示。

註冊極光

先到極光官網,註冊帳號,配置一下flutter項目的包名,若是不記得了,能夠到flutter項目下的 android/app/build.gradle 中找一下,defaultConfig 下的 applicationId 就是包名,這個配置文件不要關,後續咱們還會再回來。android

在極光配置好安卓的包名後,咱們會獲得 AppKey,到這就算註冊完成。
ios

項目配置

繼續打開,android/app/build.gradle 文件。後端

  1. defaultConfigminSdkVersion 修改成 17flutter建立後默認是16,沒法使用極光推送。
  2. 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

得到惟一 rid

在同一個極光應用中,每一個設備都擁有惟一的一個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 方法,彈出受權。若是用戶不一樣意,後續沒法再次彈出,只能跳轉系統配置頁面開啓推送權限。

其餘

推送的強大不只如此,還有設置標籤設置別名等功能,能夠將每一個用戶都進行精細劃分,作到更精準的推送。


更多內容歡迎關注公衆號:《前端拾遺》

相關文章
相關標籤/搜索