概述
在移动应用开发中,消息推送可以说是一项非常重要的功能,它能够起到提醒或者唤醒用户的作用,同时也是产品运营人员更高效地实现运营目标的重要手段,比如将新上架一个商品或者最新的一条新闻推送给用户。
事实上,消息推送是一个横跨业务服务器、第三方推送服务托管厂商、操作系统长连接推送服务、用户终端以及移动手机应用等五方面的复杂业务应用场景。在原生iOS开发中,为了简化消息推送,苹果推送服务(简称APNs)接管了系统所有应用的消息通知需求,任何第三方消息推送都需要经过推送服务进行转发。对于原生Android平台来说,则可以使Google提供的类似Firebase云消息传递机制来实现统一的推送托管服务。
具体来说,当某个应用需要发送消息推送时,消息会由应用的服务器先发给苹果或Google的消息推送服务器,然后经由APNs或FCM(Google的消息推送框架)发送到设备,设备接收到消息后经过系统层面完成解析,最终把消息转发给所属应用,整个工作流程如下图所示。
不过,由于Google服务在大陆地区并不稳定,因此在国内的Android手机供应商通常会把Google服务换成自己开发的推送服务,并定制一套推送标准,而对于开发者来说,无疑是增大了适配的负担。所以在处理Android端的消息推送时,通常会使用第三方推送服务,比如极光、个推和友盟推送等。公司在选择第三方工具时候,由于权衡的尺度不一样,所以选择哪家作为推送服务还得根据实际情况而定。
虽然这些第三方推送服务使用自建的长连接,无法享受操作系统底层的优化,但它们会对所有使用推送服务的应用共享推送通道,只要有一个使用第三方推送服务的应用没被系统杀死,就可以让消息及时送达,因此并不需要考虑消息到达率的问题。
由于第三方推送服务厂商提供的功能和接入流程大都一致,考虑到极光的社区和生态相对活跃,并且在国内较早的推出Flutter插件,所以我们可以在Flutter项目中直接使用这个插件,下图是极光推送的架构示意图。
极光推送,英文简称JPush,是一个免费的第三方消息推送服务厂商,围绕推送服务,极光官方推出了众多平台的SDK及插件,如图下图所示。
添加极光插件
Flutter插件支持多种依赖方式,通常有3种:git依赖、pub.dev依赖和本地依赖。
通过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上加载,与你的网速有很大关系,也很有可能加载不成功,需要耐心等待。
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应用,并在打开极光开发者服务后台添加一条推送消息,选择需要推送的平台,然后点击【立即发送】按钮,如下图所示。
等待消息推送成功后,就可以在对应的移动设备上看到推送的消息,如下图所示。
到此这篇关于Flutter应用集成极光推送的实现示例的文章就介绍到这了,更多相关Flutter集成极光推送内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!