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和统计功能,可以帮助开发者更好地理解和优化推送效果。

相关推荐
caihuayuan55 小时前
升级element-ui步骤
java·大数据·spring boot·后端·课程设计
Kookoos7 小时前
ABP vNext + EF Core 实战性能调优指南
数据库·后端·c#·.net·.netcore
揣晓丹8 小时前
JAVA实战开源项目:健身房管理系统 (Vue+SpringBoot) 附源码
java·vue.js·spring boot·后端·开源
豌豆花下猫9 小时前
Python 3.14 新特性盘点,更新了些什么?
后端·python·ai
caihuayuan510 小时前
Vue生命周期&脚手架工程&Element-UI
java·大数据·spring boot·后端·课程设计
明月与玄武12 小时前
Spring Boot中的拦截器!
java·spring boot·后端
菲兹园长13 小时前
SpringBoot统一功能处理
java·spring boot·后端
muxue17813 小时前
go语言封装、继承与多态:
开发语言·后端·golang
开心码农1号13 小时前
Go语言中 源文件开头的 // +build 注释的用法
开发语言·后端·golang
北极象13 小时前
Go主要里程碑版本及其新增特性
开发语言·后端·golang