Flutter中极光推送的使用----jpush_flutter

Flutter中集成极光推送的完整指南

1、申请极光账号和创建应用

极光推送(JPush)是国内领先的移动消息推送服务,为开发者提供稳定高效的推送解决方案。要使用极光推送服务,首先需要访问极光官网注册账号。

注册完成后,进入"服务中心"→"开发者平台",点击创建新应用。在创建应用时需要填写应用名称和上传应用图标。创建完成后,极光平台会提供两个关键信息:

  • appKey:移动客户端使用的key
  • Master Secret:服务端使用的key(仅服务端开发需要)

小技巧:如果你使用appuploader这类iOS开发工具,可以在配置推送证书时同步设置极光推送的相关参数,这样能提高开发效率。

2、添加项目依赖

极光推送为Flutter提供了官方插件jpush-flutter-plugin。在pubspec.yaml文件中添加以下依赖:

yaml 复制代码
dependencies:
  jpush_flutter: ^0.0.11

添加完成后,在Android Studio中执行"Packages get"下载依赖。

3、Android项目配置

打开android/app/src/build.gradle文件,在defaultConfig中添加以下配置:

groovy 复制代码
defaultConfig {
    applicationId "your.package.name"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    
    ndk {
        abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64'
    }

    manifestPlaceholders = [
        JPUSH_PKGNAME: applicationId,
        JPUSH_APPKEY : "你的极光appKey",
        JPUSH_CHANNEL: "developer-default",
    ]
}

4、实现推送功能

基本推送实现

在main.dart中引入极光推送包并初始化:

dart 复制代码
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:jpush_flutter/jpush_flutter.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String debugLable = 'Unknown';
  final JPush jpush = JPush();
  
  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  Future<void> initPlatformState() async {
    try {
      jpush.addEventHandler(
        onReceiveNotification: (Map<String, dynamic> message) async {
          print("接收到推送: $message");
          setState(() {
            debugLable = "接收到推送: $message";
          });
        }
      );
    } on PlatformException {
      debugLable = '平台版本获取失败';
    }
  }
  
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('极光推送')),
        body: Center(
          child: Column(
            children: [
              Text('结果: $debugLable\n'),
              ElevatedButton(
                child: Text('发送测试推送'),
                onPressed: () {
                  var fireDate = DateTime.fromMillisecondsSinceEpoch(
                    DateTime.now().millisecondsSinceEpoch + 3000);
                  var localNotification = LocalNotification(
                    id: 234,
                    title: '测试标题',
                    buildId: 1,
                    content: '测试内容',
                    fireTime: fireDate,
                    subtitle: '子标题',
                  );
                  jpush.sendLocalNotification(localNotification);
                }
              ),
            ]
          )
        ),
      ),
    );
  }
}

高级功能实现

接收推送提醒
dart 复制代码
void _ReceiveNotification() async {
  jpush.addEventHandler(
    onReceiveNotification: (Map<String, dynamic> message) async {
      print("收到推送: $message");
    }
  );
}
处理推送点击事件
dart 复制代码
void _OpenNotification() async {
  jpush.addEventHandler(
    onOpenNotification: (Map<String, dynamic> message) async {
      print("用户点击了推送: $message");
      // 这里可以添加页面跳转逻辑
    }
  );
}
接收自定义消息
dart 复制代码
void _ReceiveCustomMsg() async {
  jpush.addEventHandler(
    onReceiveMessage: (Map<String, dynamic> message) async {
      print("收到自定义消息: $message");
    }
  );
}

5、iOS特殊配置

对于iOS平台,除了上述配置外,还需要:

  1. 在Xcode中启用Push Notifications能力
  2. 上传APNs证书到极光后台
  3. 在AppDelegate.swift中配置推送

提示:使用appuploader可以简化iOS推送证书的生成和管理过程,它提供了可视化的证书管理界面,避免手动操作的繁琐。

常见问题解决

  1. 收不到推送:检查appKey是否正确,确认设备网络正常,检查极光后台消息状态
  2. iOS推送不显示:确认证书类型匹配(开发/生产),检查设备通知权限
  3. Android推送延迟:检查设备后台进程是否被清理,确认集成正确

通过以上步骤,你应该已经成功在Flutter应用中集成了极光推送服务。极光推送提供了丰富的API和统计功能,可以帮助开发者更好地理解和优化推送效果。

相关推荐
大鸡腿同学2 小时前
手心向上,手心向下
后端
CCblandy3 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
凤山老林5 小时前
Spring Boot 集成 Sa-Token 实现高可用权限认证:登录鉴权、动态路由权限与接口防重放实战
spring boot·后端·sa-token·bootstrap
Bazingga6 小时前
一次推理的完整旅程:ReAct推理深度解析
后端
姜鱼问生6 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
颜酱6 小时前
一栋商业大厦,讲清 InnoDB 的表空间、段、区和页
后端·mysql
码事漫谈6 小时前
1956 亿行数据该怎么存:金仓时序数据库的三个实测
后端
Wx-bishekaifayuan6 小时前
springboot桂味美食分享系统40540-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
彭亚川Allen7 小时前
从零手搓 RAG 之检索全流程,给大模型接上自己的知识库
前端·后端·ai编程
IT_陈寒7 小时前
别让Java字符串拼接偷偷吃掉你的内存
前端·人工智能·后端