Flutter應用集成極光推送

概述

在移動應用開發中,消息推送能夠說是一項很是重要的功能,它可以起到提醒或者喚醒用戶的做用,同時也是產品運營人員更高效地實現運營目標的重要手段,好比將新上架一個商品或者最新的一條新聞推送給用戶。node

事實上,消息推送是一個橫跨業務服務器、第三方推送服務託管廠商、操做系統長鏈接推送服務、用戶終端以及移動手機應用等五方面的複雜業務應用場景。在原生iOS開發中,爲了簡化消息推送,蘋果推送服務(簡稱APNs)接管了系統全部應用的消息通知需求,任何第三方消息推送都須要通過推送服務進行轉發。對於原生Android平臺來講,則可使Google提供的相似Firebase雲消息傳遞機制來實現統一的推送託管服務。android

具體來講,當某個應用須要發送消息推送時,消息會由應用的服務器先發給蘋果或Google的消息推送服務器,而後經由APNs或FCM(Google的消息推送框架)發送到設備,設備接收到消息後通過系統層面完成解析,最終把消息轉發給所屬應用,整個工做流程以下圖所示。git

在這裏插入圖片描述

不過,因爲Google服務在大陸地區並不穩定,所以在國內的Android手機供應商一般會把Google服務換成本身開發的推送服務,並定製一套推送標準,而對於開發者來講,無疑是增大了適配的負擔。因此在處理Android端的消息推送時,一般會使用第三方推送服務,好比極光、個推和友盟推送等。公司在選擇第三方工具時候,因爲權衡的尺度不同,因此選擇哪家做爲推送服務還得根據實際狀況而定。github

雖然這些第三方推送服務使用自建的長鏈接,沒法享受操做系統底層的優化,但它們會對全部使用推送服務的應用共享推送通道,只要有一個使用第三方推送服務的應用沒被系統殺死,就可讓消息及時送達,所以並不須要考慮消息到達率的問題。npm

因爲第三方推送服務廠商提供的功能和接入流程大都一致,考慮到極光的社區和生態相對活躍,而且在國內較早的推出Flutter插件,因此咱們能夠在Flutter項目中直接使用這個插件,下圖是極光推送的架構示意圖。
在這裏插入圖片描述服務器

極光推送,英文簡稱JPush,是一個免費的第三方消息推送服務廠商,圍繞推送服務,極光官方推出了衆多平臺的SDK及插件,如圖下圖所示。架構

在這裏插入圖片描述

添加極光插件

Flutter插件支持多種依賴方式,一般有3種:git依賴、pub.dev依賴和本地依賴。app

經過git 方式依賴

打開Flutter工程的 pubspec.yaml 配製文件,而後添加添加 以下依賴代碼。框架

# 極光推送插件
  jpush_flutter:
    # git 依賴方式
    git:
      # git 依賴的地址
      url: git://github.com/jpush/jpush-flutter-plugin.git
      # git 倉庫中的分支
      ref: master

而後,點擊 【Packages get 】下載依賴或者直接在terminal 命令行中 使用【 flutter packages get】命令 來加載依賴,以下圖所示。
在這裏插入圖片描述
直接經過git 的方式從 github上加載,與你的網速有很大關係,也頗有可能加載不成功,須要耐心等待。iphone

pub.dev方式依賴

pub 是Google官方的Dart Packages倉庫,相似於node中的npm倉庫,android中的jcenter,咱們能夠在上面查找咱們須要的包和插件。咱們能夠訪問國內的pub倉庫來更快的搜索咱們須要的插件。
在這裏插入圖片描述
而後在 flutter 項目的 pubspec.yaml 文件中配製極光推送的pub依賴,以下所示。

jpush_flutter: 0.1.0
jpush_flutter: ^0.1.0

兩種寫法的區別在於,後者會自動下載更高版本的,好比說這裏配製的是 0.1.0 ,當 pub 倉庫中的版本升級爲 0.1.3 的時候,那麼咱們項目中本地依賴的版本不必定是 當前設置的 0.1.0 版本,而是其餘版本。固然還可使用下面的方式。

jpush_flutter: any

前者的區別是 會根據當前的項目環境加載適合當前項目環境中的版本插件,若有時咱們指定版本加載時,會出現各類異常的衝突,當幾個版本中與你使用到的功能無太大差別時,就能夠考慮使用這種方法來簡單粗暴的解決。
在這裏插入圖片描述

本地依賴

除了上面兩種方式外,咱們還能夠把極光推送 flutter 插件下載到本地,而後在本地進行依賴。首先,去github上下載極光推送flutter插件的源碼。
在這裏插入圖片描述
而後把下載下來的 zip 文件解壓,放到一個目錄中,而後在 flutter 項目中的 pubspec.yaml 配製極光推送的本地依賴,以下所示。

# 極光推送插件
  jpush_flutter:
    path: ../jpush-flutter-plugin

這裏使用到的 ../ 是校對路徑的表示方法,固然也可使用jpush-flutter-plugin文件夾的全路徑。
在這裏插入圖片描述
在 flutter 項目中有多種方式方法來依賴極光推送插件,依賴成功後以下圖所示。
在這裏插入圖片描述

推送示例

原生配置

Android平臺配置

因爲推送會涉及到不少原生的配置,因此爲了可以正常的進行消息推送,還須要在原生Android和iOS中進行一些配置工做。對於Android平臺來講,配置工做相對簡單,打開android/app/build.gradle文件,而後在defaultConfig節點中添加以下代碼。

android: {
  ....
  defaultConfig {
    applicationId "替換成本身應用ID"
...
//ndk用於真機運行,用來指定對應的芯片架構
    ndk {
    abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a',        
    }

    manifestPlaceholders = [
        JPUSH_PKGNAME : applicationId,
        JPUSH_APPKEY : "appkey", 
        JPUSH_CHANNEL : "developer-default",
    ]
  }    
}

以下圖所示。
在這裏插入圖片描述
在極光開發者平臺中建立推送應用程序,而後填寫build.gradle腳本所需的參數,以下圖所示。
在這裏插入圖片描述
而後,在Android手機上運行項目,會有 Running Gradle task ... 的提示,去 maven jcenter 下載 android 平臺使用到的依賴庫以及os庫等。
在這裏插入圖片描述

iOS平臺依賴

對於iOS平臺來講,應用配置相對Android平臺來講要繁瑣一些,由於iOS的推送配置會涉及應用權限、蘋果APNs服務和極光後臺信息關聯等過程。
在這裏插入圖片描述
而後,使用Xcode打開Flutter項目的iOS工程,而後依次選擇【Target】→【Signing & Capabilities】→【Capability】→【Push Notifications】選項開啓應用的消息推送功能,以下圖所示。
在這裏插入圖片描述
而後,在極光開發者平臺中配製 iOS的相關推送認證。
在這裏插入圖片描述
申請推送證書的過程,極光推送官網提供了比較詳細的操做步驟,能夠按照官網的步驟進行申請。而後,在極光開發者服務後臺上傳申請到的推送證書,以下圖所示。

在這裏插入圖片描述
配製好證書後,運行 Flutter 項目於 iphone 手機上,以下圖所示。
在這裏插入圖片描述

運行項目

完成上述操做後,極光推送所需的全部原生環境就配置完成了。接下來,使用Android Studio打開Flutter工程,在main.dart文件的initState生命週期函數中添加初始化JPush代碼,以下所示。

void initState() {
   super.initState();
   JPush jpush = new JPush();
   jpush.setup(
   appKey: "96d7d7e77bee7abd4d568978",
   channel: "flutter_channel",
   production: false,
   debug: true,      //是否打印debug日誌
   );
 }

而後,啓動Flutter應用,並在打開極光開發者服務後臺添加一條推送消息,選擇須要推送的平臺,而後點擊【當即發送】按鈕,以下圖所示。
在這裏插入圖片描述
等待消息推送成功後,就能夠在對應的移動設備上看到推送的消息,以下圖所示。
在這裏插入圖片描述

相關文章
相關標籤/搜索