68-Flutter中极光推送的使用

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

极光推送的官方网址为:https://www.jiguang.cn/

注册好后,进入'服务中心',然后再进入'开发者平台',点击创建应用。

这时候会出现新页面,让你填写“应用名称”和上传“应用图标”。

创建完成,极光平台就会给我们两个key。

  • appKey : 移动客户端使用的key
  • Master Secret : 服务端使用的key

我们这里只做移动端不做服务端,所以只需要appKey。得到这个Key也算是极光平台操作完了

2、加入dependencies依赖

github网址:https://github.com/jpush/jpush-flutter-plugin

要使用极光推送插件必须先下载包,要下载包就需要先添加依赖,直接把下面的代码加入pubspec.yaml文件中。

jpush_flutter: 0.0.11

写完代码后,选择Android Studio右上角的Packages get进行下载,下载完成后进行操作。

3、build.gradle添加可以和cpu型号代码

打开android/app/src/build.gradle文件,加入如下代码:

defaultConfig {applicationId "sscai.club.flutter_shop"minSdkVersion 16targetSdkVersion 28versionCode flutterVersionCode.toInteger()versionName flutterVersionNametestInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"/*新加入的*/ndk {/*选择要添加的对应 cpu 类型的 .so 库。abiFilters 'armeabi''armeabi-v7a''x86''x86_64''mips''mips64'// 'arm64-v8a',/*还可以添加}manifestPlaceholders = [JPUSH_PKGNAME: applicationId,JPUSH_APPKEY : "这里写入你自己申请的Key哦", /*NOTE: JPush 上注册的包名对应的 Appkey.*/JPUSH_CHANNEL: "developer-default", /*暂时填写默认值即可.*/]/*新加入的*/
}

详细请参考:https://github.com/jpush/jpush-flutter-plugin

4、主要代码编写

在 main.dart 中引入依赖

import 'package:flutter/material.dart';
import 'dart:async';import 'package:flutter/services.dart';
import 'package:jpush_flutter/jpush_flutter.dart';

编写initPlatformState方法

Future<void> initPlatformState() async {String platformVersion;try {/*监听响应方法的编写*/jpush.addEventHandler(onReceiveNotification: (Map<Stringdynamic> message) async {print(">>>>>>>>>>>>>>>>>flutter 接收到推送: $message");setState(() {debugLable = "接收到推送: $message";});});} on PlatformException {platformVersion = '平台版本获取失败,请检查!';}if (!mounted){return;}setState(() {debugLable = platformVersion;});
}

编写build的视图

@overrideWidget build(BuildContext context) {return new MaterialApp(home: new Scaffold(appBar: new AppBar(title: const Text('极光推送'),),body: new Center(child: new Column(children:[new Text('结果: $debugLable\n'),new RaisedButton(child: new Text('点击发送推送消息\n',),onPressed: () {/*三秒后出发本地推送*/var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 3000);var localNotification = LocalNotification(id: 234,title: '我是推送测试标题',buildId: 1,content: '看到了说明已经成功了',fireTime: fireDate,subtitle: '一个测试',);jpush.sendLocalNotification(localNotification).then((res) {setState(() {debugLable = res;});});}),])),),);}

main.dart 完整代码:

import 'package:flutter/material.dart';
import 'dart:async';import 'package:flutter/services.dart';
import 'package:jpush_flutter/jpush_flutter.dart';void main() => runApp(new MyApp());class MyApp extends StatefulWidget {@override_MyAppState createState() => new _MyAppState();
}class _MyAppState extends State<MyApp{String debugLable = 'Unknown';   /*错误信息*/final JPush jpush = new JPush(); /* 初始化极光插件*/@overridevoid initState() {super.initState();initPlatformState();  /*极光插件平台初始化*/}Future<void> initPlatformState() async {String platformVersion;try {/*监听响应方法的编写*/jpush.addEventHandler(onReceiveNotification: (Map<Stringdynamic> message) async {print(">>>>>>>>>>>>>>>>>flutter 接收到推送: $message");setState(() {debugLable = "接收到推送: $message";});});} on PlatformException {platformVersion = '平台版本获取失败,请检查!';}if (!mounted){return;}setState(() {debugLable = platformVersion;});}/*编写视图*/@overrideWidget build(BuildContext context) {return new MaterialApp(home: new Scaffold(appBar: new AppBar(title: const Text('极光推送'),),body: new Center(child: new Column(children:[new Text('结果: $debugLable\n'),new RaisedButton(child: new Text('点击发送推送消息\n',),onPressed: () {/*三秒后出发本地推送*/var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 3000);var localNotification = LocalNotification(id: 234,title: '我是推送测试标题',buildId: 1,content: '看到了说明已经成功了',fireTime: fireDate,subtitle: '一个测试',);jpush.sendLocalNotification(localNotification).then((res) {setState(() {debugLable = res;});});}),])),),);}
}

效果图:

4、扩展几个方法

收到推送提醒

监听addReceiveNotificationListener方法:

/*
* 收到推送提醒
* */void _ReceiveNotification() async {FlutterJPush.addReceiveNotificationListener((JPushNotification notification) {setState(() {/// 收到推送print("收到推送提醒: $notification");});});}

打开推送提醒

监听 addReceiveNotificationListener方法:

 /** 打开推送提醒* */void _OpenNotification() async {FlutterJPush.addReceiveOpenNotificationListener((JPushNotification notification) {setState(() {print("打开了推送提醒: $notification");});});}

监听接收自定义消息

一般项目这个方法会用的比较多吧!!!

监听 addReceiveCustomMsgListener方法:

  /** 监听接收自定义消息* */void _ReceiveCustomMsg() async {FlutterJPush.addReceiveCustomMsgListener((JPushMessage msg) {setState(() {print("收到推送消息提醒: $msg");});});}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414296.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作263:弹性布局 修改样式

<div class"container" style"display: flex;flex-direction: column"><!-- <el-radio-group v-model"mode">--><div ><!-- <el-radio-button class"login-btn" label"0">营销端</el…

MongoDB系列四(索引).

一、索引简介 再来老生常谈一番&#xff0c;什么是索引呢&#xff1f;数据库索引与书籍的索引类似。有了索引就不需要翻整本书&#xff0c;数据库可以直接在索引中查找&#xff0c;在索引中找到条目以后&#xff0c;就可以直接跳转到目标文档的位置&#xff0c;这能使查找速度提…

并发编程之多线程线程安全(上)

1、为什么有线程安全问题&#xff1f; 当多个线程共享同一个全局变量或静态变量&#xff0c;做写的操作时&#xff0c;可能会发生数据冲突问题&#xff0c;也就是线程安全问题。但是做读操作是不会发生数据冲突问题。 案例&#xff1a;现在有100张火车票&#xff0c;有两个窗口…

并发编程快速入门

1、线程与进程的区别 进程是所有线程的集合&#xff0c;每一个线程是进程中的一条执行路径。 比方&#xff1a;通过查看 windows 任务管理器中的列表&#xff0c;我们可以把运行在内存中的 exe 文件理解成进程&#xff0c;进程是受操作系统管理的基本运行单元。 2、为什么要…

工作275:表单验证层级添加

<template><!--绑定了一个 控制是否为全屏fullscreen close-on-click-modal 是否通过点击model进行关闭 visible是否显示弹出框 close关闭按钮 --><el-dialog :title"fullTitle" width"80%" :fullscreen"false" :close-on-click-…

Python 黑帽子第二章运行截图

转载于:https://www.cnblogs.com/blankicefire/p/8796158.html

公司网页添加旺旺,状态不正确

这两天在给公司做的网站添加旺旺&#xff0c;在阿里巴巴官网生成代码之后复制到网页。想试试旺旺的状态是否正确&#xff0c;登录旺旺之后一直都是不在线状态&#xff0c;如下图&#xff1a; &#xff0c; 到官网问客服之后得到的答复如下&#xff1a; 如果您登录了阿里旺旺…

并发编程之多线程线程安全(下)

1、什么是 Volatile&#xff1f; volatile 是一个类型修饰符&#xff0c;具有可见性&#xff0c;也就是说一旦某个线程修改了该被 volatile 修饰的变量&#xff0c;它会保证修改的值会立即被更新到主存&#xff0c;当有其他线程需要读取时&#xff0c;可以立即获取修改之后的值…

工作265:v-model实现原理 自定义组件使用v-model

v-model只是一个语法糖&#xff0c;等于:valueinput&#xff0c;真正的实现靠的还是&#xff1a; &#xfeff;v-bind:绑定响应式数据&#xff0c;触发 input 事件并传递数据 (核心和重点) 1其实和下面一样的 <input :value“something” input“something $event.target…

idea中隐藏.iml文件

在创建父子工程或者聚合工程时产生的大量 .iml 文件&#xff0c;有时会对我们的操作产生干扰&#xff0c;所以&#xff0c;一般情况下&#xff0c;我们都将其隐藏掉&#xff0c;步骤如下&#xff1a; File——>settings——>Editor——>File Types——>Ignore fil…

微信小程序视频弹幕效果

这次&#xff0c;和大家一起探讨下小程序视频弹幕一、按照老规矩&#xff0c;先附上gif效果图&#xff1a;二、接下来看下官方文档API对vide说明PS&#xff1a;相关属性解析&#xff1a;danmu-list:弹幕列表 enable-danmu:是否显示弹幕 danmu-btn:弹幕按钮 controls:是否显示视…

基于Docker搭建GitLab代码管理

关于Git、SVN的优缺点就不再重复了&#xff0c;本篇主要以实际搭建为主。 1、下载镜像文件 在命令行窗口执行如下指令&#xff0c;预计下载完成4分钟。 docker pull beginor/gitlab-ce:11.0.1-ce.0注意&#xff1a; 一定要配置镜像加速&#xff0c;不然会非常非常的慢&#x…

CentOS 7安装Hadoop 3.0.0

最近在学习大数据&#xff0c;需要安装Hadoop&#xff0c;自己弄了好久&#xff0c;最后终于弄好了。网上也有很多文章关于安装Hadoop的&#xff0c;但总会遇到一些问题&#xff0c;所以把在CentOS 7安装Hadoop 3.0.0的整个过程记录下来&#xff0c;有什么不对的地方大家可以留…

Docker中Maven私服的搭建

为何用到Maven私服&#xff1f; 在实际开发中&#xff0c;项目中可能会用到第三方的jar、内部通讯的服务接口都会打入到公司的私服中。 我们从项目实际开发来看&#xff1a; 一些无法从外部仓库下载的构件&#xff0c;例如内部的项目还能部署到私服上&#xff0c;以便供其他依赖…

博客作业03--栈和队列

1.学习总结 2.PTA实验作业 题目1&#xff1a;jmu-字符串是否对称 1设计思路 for i 1 to 字符串str结束if 栈顶元素 ! str[i] 字符串不对称输出noendfor字符串对称输出yes 2代码截图 3PTA提交列表说明 前面几处错误都是因为输入用的是getchar(),后来改用gets就对了好像是因为这…

apollo报:系统出错,请重试或联系系统负责人

说明&#xff1a;基于 docker 搭建的 apollo&#xff0c;创建项目后一直报系统出错&#xff0c;请重试或联系系统负责人错误。 项目人员列表一直空白&#xff1a; 经排查是数据库配置参数不匹配&#xff0c;由于自己的虚拟机 ip 为 192.168.10.130 注意&#xff1a;修改完需要重…