Flutter在IOS平台实现消息推送
![作者头像](https://ask.qcloudimg.com/http-save/yehe-7992912/4mnyli70ue.jpeg)
1. 配置项目的包名
![](https://ask.qcloudimg.com/http-save/yehe-7992912/akfmqqphw4.png)
![](https://ask.qcloudimg.com/http-save/yehe-7992912/ra1nuhebw6.png)
2. 申请IOS生产证书
IOS的生产证书在极光推送IOS平台配置时需要用到,完成这个证书的创建过程比较复杂,以下分为三个阶段来完成。
第一步:创建标识符。
登录苹果开发者中心,选择 证书/标识符/资料 。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/4t21yoph3a.png)
添加标识符。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/z8ndi40nlt.png)
选择标识符类型,点击继续。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/qj7ovwd47o.png)
输入描述及包名,点击继续。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/3bpf0m51wu.png)
点击继续之前,记得勾选推送消息功能。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/5te378j3ye.png)
至此,标识符添加完毕,在标识符列表就可以看到了。
第二步:生成钥匙串文件。
打开苹果电脑的钥匙串访问功能。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/6uointwh69.png)
选择 证书助理 ▸ 从证书颁发机构请求证书。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/8518tcngzv.png)
填写邮件地址,邮件地址可以随便填写,选择存储到磁盘。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/wayun0ljrp.png)
生成完成后的文件。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/wqb3etebl.png)
第三步:创建证书。
登录苹果中心,添加证书。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/oaanu361rc.png)
选择证书的服务。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/qtgtavr7gk.png)
选择在第一步中创建成功的标识符,点击继续。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/4evyq0uv3j.png)
选择在第二步中创建成功的钥匙串文件,点击继续。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/ma45nzne5t.png)
至此,证书就配置完成了,点击下载可将证书下载到本地。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/0heedhyfih.png)
下载完成后,双击打开,在电脑的钥匙串里就会显示出证书文件。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/jf2e299fla.png)
右键导出。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/5azyo187xo.png)
导出时需要输入保护密码,还会要求输入电脑的密码,导出的文件后辍名为p12。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/uqf4otav39.png)
3. 极光推送平台申请应用
创建应用。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/jspqbev6e4.png)
填写应用程序名称。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/67mfu3fbcv.png)
选择IOS平台,在生产证书处选择之前创建的证书,证书格式为p12。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/2y9o2a9dz3.png)
完成上面的操作在应用管理中就可以看到创建的应用程序了。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/noe66z1bqx.png)
点击“应用设置”,就可以看到应用信息了,其中AppKey非常重要,在项目中使用极光推送会用到。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/whu4b82jhn.png)
4. 使用极光推送SDK
1. 安装插件
dependencies:
jpush_flutter: 0.6.3
在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。
如果无法正常下载,执行 flutter pub get 。
2. 配置插件
(1). 在Xcode7 之后,明确要求必须是https协议的请求,配置如下:
打开配置文件,路径为:ios▸Runner▸ Info.plist 。
![](https://ask.qcloudimg.com/http-save/yehe-7992912/ux5ag605ac.png)
(2). 在 Xcode8 之后需要点开推送选项,配置如下:
![](https://ask.qcloudimg.com/http-save/yehe-7992912/cfiemq876v.png)
3. 使用插件
import 'package:flutter/material.dart';
import 'package:jpush_flutter/jpush_flutter.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
home: JpushPage(),
class JpushPage extends StatefulWidget {
JpushPage({Key key}) : super(key: key);
_JpushPageState createState() => _JpushPageState();
class _JpushPageState extends State<JpushPage> {
@override
void initState() {
super.initState();
// 初始化极光推送
this.initJpush();
// 监听极光推送 (自定义的方法)
// https://github.com/jpush/jpush-flutter-plugin/blob/master/documents/APIs.md
initJpush() async {
// 初始化
JPush jpush = new JPush();
// 获取注册的ID
jpush.getRegistrationID().then((rid) {
print("获取注册的id:$rid");
// 初始化
jpush.setup(
// 极光官方申请应用的APP KEY
appKey: "17d78ecf32c322db169a1d98",
channel: "theChannel",
production: false,
debug: true,
// 设置别名实现指定用户推送
jpush.setAlias("jg6666").then((map) {
print("设置别名成功");
// iOS10+ 可以通过此方法来设置推送是否前台展示,是否触发声音,是否设置应用角标 badge
jpush.applyPushAuthority(new NotificationSettingsIOS(
sound: true,
alert: true,
badge: true
try {
// 监听消息通知
jpush.addEventHandler(
// 接收通知回调方法。
onReceiveNotification: (Map<String, dynamic> message) async {
print("flutter onReceiveNotification: $message");
// 点击通知回调方法。
onOpenNotification: (Map<String, dynamic> message) async {
// 当用户点击时,可以做一些路由跳转
print("flutter onOpenNotification: $message");
// 接收自定义消息回调方法。
onReceiveMessage: (Map<String, dynamic> message) async {
print("flutter onReceiveMessage: $message");
} catch (e) {
print('极光SDK配置异常');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(