前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Flutter 专题】63 图解 Flutter 集成极光 JPush 小结

【Flutter 专题】63 图解 Flutter 集成极光 JPush 小结

作者头像
阿策小和尚
发布于 2019-10-10 08:03:54
发布于 2019-10-10 08:03:54
2.2K00
代码可运行
举报
文章被收录于专栏:阿策小和尚阿策小和尚
运行总次数:0
代码可运行

我们每天都在接收各种推送消息,而最初的 Flutter 推送主要是与原生交互进行;现阶段极光推出了 Flutter JPush,虽不如原生强大,但日常需求均可满足,和尚尝试集成了 Flutter 版的 JPush

前期准备

  1. 在 极光 后台注册账号并【创建应用】;
  1. 在【推送设置】中设置 Android/iOS 基本信息,和尚以 Android 为例,注意应用包名为 ApplicationID
  1. 在【应用信息】中获取 AppKey 等关键参数;

中期集成

Android 配置

与原生接入 JPush 相同,需要在 Android Gradle 加入配置信息;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
defaultConfig {
    applicationId "com.example.flutterapp01"
    minSdkVersion 16
    targetSdkVersion 28
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

    ndk {
        //选择要添加的对应 cpu 类型的 .so 库。
        abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'
    }

    manifestPlaceholders = [
        JPUSH_PKGNAME : "com.example.flutterapp01",
        JPUSH_APPKEY : "AppKey", // NOTE: JPush 上注册的包名对应的 Appkey.
        JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
    ]
}
Flutter 配置

按照平常插件接入的方法在工程 pubspec.yaml 中加入 jpush_flutter: 0.1.0 并同步即可;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dependencies:
  jpush_flutter: 0.1.0
API 调用

JPush 的使用方式很简单,Demo 中都很全面,和尚仅尝试常见的方法;

1. 初始化

在原生开发中各类三方的插件几乎均须在 Application 中初始化,同样 Flutter 也需要先调用 JPush.setup 进行初始化;其中 channel 可自定义,和尚未从源码中获取准确消息,个人理解与高版本的 Android Channel 通道类似;

初始化成功之后即可获取消息推送,只是暂不能处理;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final JPush _jPush = JPush();

@override
void initState() {
  super.initState();
  initPlatformState();
}

Future<void> initPlatformState() async {
  _jPush.setup(
    appKey: "后台获取 AppKey",
    channel: "flutter_channel",
    production: false,
    debug: true,
  );
  if (!mounted) return;
}
2. RegistrationID

每个用户均有作为接收消息的唯一标识 RegistrationID,方便对单个或多个设备进行推送测试;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_jPush.getRegistrationID().then((rid) {
  setState(() {
    _result = "JPush RegistrationID 唯一标识:\n $rid";
    _registID = rid;
  });
});
3. 本地通知

JPush 提供了本地推送的方法,可以灵活调用获取本地推送消息;注意 idint 类型,设置不能过长;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 源码分析
const LocalNotification ({
    @required this.id,          // 通知 id, 可用于取消通知
    @required this.title,       // 通知标题
    @required this.content,     // 通知内容
    @required this.fireTime,    // 通知触发时间(毫秒)
    this.buildId,               // 通知样式:1 为基础样式,2 为自定义样式(需先调用 'setStyleCustom' 设置自定义样式)
    this.extra,                 // 额外信息
    this.badge = 0,             // iOS:本地推送触发后应用角标值
    this.soundName,             // iOS:指定推送的音频文件
    this.subtitle               // iOS:子标题
}): 

onTap: () {
  var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 3000);
  var localNotification = LocalNotification(
      id: 000001,
      title: 'Local Push 本地标题',
      buildId: 1,
      content: 'Local Push 本地内容',
      fireTime: fireDate,
      extra: {"extra_key": "extra_value"});
  _jPush.sendLocalNotification(localNotification).then((res) {
    setState(() {
      _result = res;
    });
  });
}
4. 通知类消息

和尚集成原生推送时分为 通知类消息透传类消息(自定义消息),两种推送略有不同;通知类消息可以通过极光后台配置消息标题、消息内容等多种信息,且 App 接收到之后直接调用推送通道展现在通知栏中;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
  _jPush.addEventHandler(
    onReceiveNotification: (Map<String, dynamic> message) async {
      // 获取通知数据
      print('Flutter JPush 获取通知类数据:\n $message');
      setState(() {
        _result = 'Flutter JPush 获取通知类数据:\n $message';
        _message = message;
      });
    }
  );
} on PlatformException {
  platformVersion = 'Failed to get platform version.';
}
5. 透传类消息

透传类消息通过极光后台配置发送,主要配置通知内容;App 接收到不会直接调用推送通道,获取内容后我们可根据内容灵活使用,是否展示推送消息或其他操作等;且通知类消息与透传类消息获取参数不同;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
  _jPush.addEventHandler(
    onReceiveMessage: (Map<String, dynamic> message) async {
      // 获取透传数据
      print('Flutter JPush 获取透传类数据:\n $message');
      setState(() {
        _result = 'Flutter JPush 获取透传类数据:\n $message';
        _message = message;
      });
    }
  );
} on PlatformException {
  platformVersion = 'Failed to get platform version.';
}
6. 推送点击监听

获取到推送之后注定要有点击操作,JPush 也同样提供了监听方法,包括通知类消息和本地推送消息;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
  _jPush.addEventHandler(
    onOpenNotification: (Map<String, dynamic> message) async {
      // 点击通知信息
      print('Flutter JPush 点击通知消息:\n $message');
      setState(() {
        _result = 'Flutter JPush 点击通知消息:\n $message';
        _message = message;
      });
    }
  );
} on PlatformException {
  platformVersion = 'Failed to get platform version.';
}
7. 清空通知栏

在用户收到推送通知后若未点击,原生 Android 可通过 NotificationManager.cancel() 清除通知,Flutter 也提供了清空通知栏方法;但和尚测试只可清空通知类推送消息,本地发送的通知消息无法清空;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Future clearAllNotifications() async {
  await _channel.invokeMethod('clearAllNotifications');
}

_jPush.clearAllNotifications();

后期测试

1. 通知类消息
  1. 在极光后台【发送通知】中按要求编辑目标平台、通知标题、通知内容、发送时间和选择目标等基本信息;
  1. App 接收消息,并展示推送消息,各参数如下:
2. 透传类消息
  1. 在极光后台【自定义消息】中按要求编辑目标平台、通知内容、发送时间和选择目标等基本信息;其中 Registration ID 为测试时获取的唯一标识;
  1. App 接收消息,不会展示推送消息,若需要可调用本地通知;各参数如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
onOpenNotification: (Map<String, dynamic> message) async {
  setState(() {
    _result = 'Flutter JPush 点击通知消息:\n $message';
    _message = message;
    Map<String, dynamic> message2 = convert.jsonDecode(_message['extras']['cn.jpush.android.EXTRA']);
    if (message2['type'] == "1") {
      Toast.show('自定义通知消息!', context, duration: Toast.LENGTH_SHORT, gravity: Toast.BOTTOM);
    }
  });
}

onReceiveMessage: (Map<String, dynamic> message) async {
  setState(() {
    _result = 'Flutter JPush 获取透传类数据:\n $message';
    _message = message;
    Map<String, dynamic> message2 = convert.jsonDecode(_message['message']);
    var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 2000);
    var localNotification = LocalNotification(
        id: message2['id'],
        title: message2['title'],
        buildId: 1,
        content: message2['context'],
        fireTime: fireDate,
        extra: {"type": message2['type']});
    _jPush.sendLocalNotification(localNotification).then((res) {
      setState(() { _result = res; });
    });
  });
}

和尚认为 Flutter 版的极光推送与 Android 原生版本的差异在于,大部分的配置有 App 端移到了极光后台,包括图标 icon,页面处理,通知级别等;和尚仅尝试了基本的消息推送及处理,还是有很多细节需要认真学习;如有问题,请多多指导!

来源:阿策小和尚

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿策小和尚 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
app推送-极光推送
现在可以集成各大厂商都自己研发的推送方式,比如小米推送、华为推送。他们自己推送肯定在自己的手机能收到,还有就是只要你有钱什么都能解决。。。。。
猿码优创
2019/07/28
4.2K1
极光推送使用心得以及记录
最近项目遇到推送,与后台贱人于一合计,果断采用了极光推送。在使用过程中,有爽有不爽,特意再次记录下。
贺biubiu
2019/06/10
1.3K0
Java集成极光推送
原始链接: https://shuibo.cn/jiguang-push.html
Bobby
2019/04/09
2.2K0
极光推送实例
需求:先需要给手机推送一个消息,或者一个连接,点击消息唤醒APP,打开APP进入相对应的界面。
斯文的程序
2019/11/07
1.4K0
Flutter 第三方SDK集成(友盟统计,极光推送,百度地图)
1.可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。
八归少年
2022/06/29
2.9K0
推送-JPush(极光推送)的使用
推送服务可以说是所有 App 的标配,不论是哪种类型的 App,推送都从很大程度上决定了 App 的 打开率、使用率、存活率 。因此,熟知并掌握推送原理及方法,对每一个开发者来说都是必备技能,对每一个依赖 App 的公司来说都至关重要。本文主要讨论项目中使用极光推送来实现推送业务。
進无尽
2018/09/12
6.8K1
推送-JPush(极光推送)的使用
Flutter在Android平台实现消息推送
点击“应用设置”,就可以看到应用信息了,其中AppKey非常重要,在项目中使用极光推送会用到。
越陌度阡
2021/03/02
1.9K0
Flutter在Android平台实现消息推送
Flutter应用集成极光推送
在移动应用开发中,消息推送可以说是一项非常重要的功能,它能够起到提醒或者唤醒用户的作用,同时也是产品运营人员更高效地实现运营目标的重要手段,比如将新上架一个商品或者最新的一条新闻推送给用户。
用户6256742
2024/08/13
4770
Flutter应用集成极光推送
Flutter在IOS平台实现消息推送
IOS的生产证书在极光推送IOS平台配置时需要用到,完成这个证书的创建过程比较复杂,以下分为三个阶段来完成。
越陌度阡
2021/03/02
3.7K0
Flutter在IOS平台实现消息推送
.NET对接极光消息推送
很多手机APP会不定时的给用户推送消息,例如一些新闻APP会给用户推送用户可能感兴趣的新闻,或者APP有更新了,会给用户推送是否选择更新的消息等等,这就是所谓的“消息推送”。
追逐时光者
2022/02/11
1.3K0
极光推送maven与代码,无需修改,粘贴即用
maven: <!-- 极光推送 --> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>3.3.10</version> </dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jiguang-common</artifactId> <version
红目香薰
2022/11/28
4660
【Flutter 专题】120 Flutter & 腾讯移动通讯 TPNS~
和尚前两天刚学习了原生 Android 腾讯移动通讯 TPNS,发现同时提供了 Flutter_Plugin,今天尝试一下对 Flutter 的支持;
阿策小和尚
2021/04/22
1.5K0
JPush java_sdk 的使用
1 maven配置文件 <!-- 极光推送 jPush --> <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jpush-client</artifactId> <version>3.2.7</version> </dependency> <dependency> <groupId>cn.jpush.api</groupId> <artifactId
用户5927264
2019/08/01
8060
JPush API Java Library 原
$master_secret = 'a36fef7cbd5b47b74c20278c'; $app_key='1d2bd69d09c3756fa20f9c96';
wuweixiang
2018/08/14
6810
JPush API Java Library
                                                                            原
Android 极光推送API
  发现现在的Android开发中很少有不用第三方SDK的,为什么呢?就是因为实现一个功能的速度快呀,比如说客服、聊天、直播等一些功能,用第三方SDK可以最快解决问题,我在实际开发中也对接过很多SDK,不过仔细写过这方便到的博客,前段时间我写了一个关于udesk SDK的文章,实现IM的,写的不算太详细,不过你如果看了也够用了,好了,进入正文。
晨曦_LLW
2022/05/10
1.6K0
Android 极光推送API
【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)
转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283
韩曙亮
2023/03/27
2.7K0
【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)
极光推送在APICloud平台的使用教程
推送服务是app应用中非常重要的一个服务,尤其对于app开发者而言,没有什么途径比消息推送更能直接、即时地触及到目标用户群体。根据相关数据显示,通过推送服务可以显著提升app的用户粘性和活跃度。
APICloud官方
2022/03/22
1.4K0
Android OPPO推送服务集成(详细教学)
  为了丰富应用推送的场景和国产大厂设备,在我有这个条件的情况下,相关机型的文章我都会写一遍,这一篇就写一下OPPO的推送服务集成,我本身是荣耀的手机,OPPO是借的朋友的旧手机来测试对接的,手机名称是OPPO Find X,ColorOS版本是V7.1,Android版本是10,下面进入正文。
晨曦_LLW
2021/06/11
2.4K0
Android OPPO推送服务集成(详细教学)
【玩转腾讯云】Flutter & 腾讯移动通讯 TPNS~
和尚前两天刚学习了原生 Android 腾讯移动通讯 TPNS,发现同时提供了 Flutter_Plugin,今天尝试一下对 Flutter 的支持;
阿策小和尚
2021/04/11
4.8K0
【玩转腾讯云】Flutter & 腾讯移动通讯 TPNS~
极光推送_总结_01_Java实现极光推送
一、代码实现 1.配置类—Env.java package com.ray.jpush.config; /**@desc : 极光推送接入配置 * * @author: shirayner * @date : 2017年9月27日 下午4:57:36 */ public class Env { /** * 1.极光推送后台APPKEY,MASTER_SECRET */ public static final String APP_KEY = "354f
shirayner
2018/08/10
1K0
相关推荐
app推送-极光推送
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验