原文地址:https://www.cnblogs.com/niceyoo/p/11095994.html

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 16
    targetSdkVersion 28
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "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<String, dynamic> message) async {
            print(">>>>>>>>>>>>>>>>>flutter 接收到推送: $message");
            setState(() {
              debugLable = "接收到推送: $message";
            });
          }
      );     } on PlatformException {
      platformVersion = '平台版本获取失败,请检查!';
    }     if (!mounted){
      return;
    }     setState(() {
      debugLable = platformVersion;
    });
}

编写build的视图

@override
  Widget 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(); /* 初始化极光插件*/
  @override
  void initState() {
    super.initState();
    initPlatformState();  /*极光插件平台初始化*/
  }   Future<void> initPlatformState() async {
    String platformVersion;     try {
      /*监听响应方法的编写*/
      jpush.addEventHandler(
          onReceiveNotification: (Map<String, dynamic> message) async {
            print(">>>>>>>>>>>>>>>>>flutter 接收到推送: $message");
            setState(() {
              debugLable = "接收到推送: $message";
            });
          }
      );     } on PlatformException {
      platformVersion = '平台版本获取失败,请检查!';
    }     if (!mounted){
      return;
    }     setState(() {
      debugLable = platformVersion;
    });
  }   /*编写视图*/
  @override
  Widget 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");
      });
    });
  } 实际案例:
import 'dart:convert';

import 'package:flutter/material.dart';
import 'dart:async'; import 'package:flutter/services.dart';
import 'package:jpush_flutter/jpush_flutter.dart'; class PushInfoWidget extends StatefulWidget {
@override
_PushInfoWidgetState createState() => new _PushInfoWidgetState();
} class _PushInfoWidgetState extends State<PushInfoWidget> {
String debugLable = 'Unknown'; /*错误信息*/
final JPush jpush = new JPush(); /* 初始化极光插件*/
@override
void initState() {
super.initState();
jpush.setup(
appKey: '自己的',
channel: 'developer-default',
production: true,
debug: false);
initPlatformState(); /*极光插件平台初始化*/
} Future<void> initPlatformState() async {
String platformVersion;
try {
/*监听响应方法的编写*/
jpush.addEventHandler(
onReceiveNotification: (Map<String, dynamic> message) async {
print(">>>>>>>>>>>>>>>>>flutter 接收到推送: $message");
setState(() {
debugLable = "接收到推送: $message";
});
}, /// 点击通知栏消息,在此时通常可以做一些页面跳转等
onOpenNotification: (Map<String, dynamic> message) async {
print(">>>>>>>>>>>>>>>>>点击之后拿到的消息内容");
print(int.parse(json.decode(message['extras']['cn.jpush.android.EXTRA'])['id']));
Navigator.pushNamed(context, '/messageDetail', arguments: {
"id": int.parse(json.decode(message['extras']['cn.jpush.android.EXTRA'])['id'])
});
},
);
} on PlatformException {
platformVersion = '平台版本获取失败,请检查!';
} if (!mounted) {
return;
} setState(() {
debugLable = platformVersion;
});
} /*编写视图*/
@override
Widget 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 + );
var localNotification = LocalNotification(
id: ,
title: '我是推送测试标题',
buildId: ,
content: '看到了说明已经成功了',
fireTime: fireDate,
subtitle: '一个测试',
);
jpush.sendLocalNotification(localNotification).then((res) {
setState(() {
debugLable = res;
});
});
}),
])),
),
);
}
}
 

Flutter中极光推送的使用----jpush_flutter的更多相关文章

  1. 68-Flutter中极光推送的使用

    1.申请极光账号和建立应用 极光推送的官方网址为:https://www.jiguang.cn/ 注册好后,进入'服务中心',然后再进入'开发者平台',点击创建应用. 这时候会出现新页面,让你填写“应 ...

  2. Flutter接入极光推送

    (1)搜索 https://pub.dartlang.org/packages/jpush_flutter ,安装插件,并且按照官方配置 /android/app/build.gradle andro ...

  3. ionic中极光推送的集成

    1.到极光官网注册账号,新建应用获得appkey. 详见:https://www.jiguang.cn/app/list 2.引入jpush插件 详见:https://github.com/jpush ...

  4. JPush Flutter Plugin(Futter推送-极光推送)

    https://pub.flutter-io.cn/packages/jpush_flutter JPush's officially supported Flutter plugin (Androi ...

  5. 在ionic/cordova中使用极光推送插件(jpush)

    Stpe1:创建一个项目(此处使用的是tab类型的项目,创建方式可参照我前一篇如何离线创建Ionic1项目) Stpe2:修改项目信息 打开[config.xml]修改下图内容:

  6. Ionic项目中使用极光推送

    Ionic项目中使用极光推送-android   对于Ionic项目中使用消息推送服务,Ionic官方提供了ngCordova项目,这个里面的提供了用angularjs封装好的消息推送服务(官方文档) ...

  7. Ionic项目中使用极光推送-android

    对于Ionic项目中使用消息推送服务,Ionic官方提供了ngCordova项目,这个里面的提供了用angularjs封装好的消息推送服务(官方文档),使用的是GitHub上的 PushPlugin ...

  8. 添加极光推送以及在ios中的问题

    项目为 ionic1 + angular1 1.添加极光推送插件 用cordova进行添加 cordova plugin add jpush-phonegap-plugin --variable AP ...

  9. Ionic2中使用第三方插件极光推送

    不同于Ionic1中插件的调用,Ionic2提供了Ionic Native.Ionic Native封装了一些常见的插件(如:Camera.Barcode Scanner等),这些插件的使用方式在官方 ...

随机推荐

  1. 【Linux】Linux下安装RabbitMQ服务

    一.安装步骤 1)安装erlang yum install -y erlang2)安装rabbitmq-serveryum install -y rabbitmq-server3)开启rabbitmq ...

  2. C/C++函数调用时传参过程与可变参数实现原理

    C/C++函数调用时传参过程与可变参数实现原理 C语言的经典swap问题 在学习C语言的时候,我们大都遇到过一些经典例题,这些经典例题背后所代表的是往往是C/C++背后的一些运行原理,比如下面这个示例 ...

  3. rds - mysql修改存储过程/函数的方式

    rds 不支持账户A 给账户B 创建授权存储过程,只能是当前登录账户给自己创建,要登陆对应账户删除原有存储过程重新创建即为修改. 例子如下: 先登陆新账号然后执行如下sql语句即可: DROP PRO ...

  4. virt-install创建虚拟机并制作成模板

    一.使用virt-install创建新的虚拟机 virt--template --ram --vcpu= --virt-type kvm --cdrom=/Data/kvm/iso/CentOS-.i ...

  5. Python3如何上传自己的PyPI项目

    有过一定的 Python 经验的开发者都知道,当引入第三方包时,我们常常会使用 pip install 命令来下载并导入包. 那么,如何写一个自己的包,上传到 PyPI 呢,其他开发者也可以通过 pi ...

  6. 实验3-1 求一元二次方程的根 (20 分) 《C语言程序设计实验与习题指导(第3版)》

    本题目要求一元二次方程的根,结果保留2位小数. 输入格式: 输入在一行中给出3个浮点系数a.b.c,中间用空格分开. 输出格式: 根据系数情况,输出不同结果: 1)如果方程有两个不相等的实数根,则每行 ...

  7. jenkins中jmeter项目流程图

  8. ArcGIS for Server 10.2 开启GeometryService

    过程非常简单,所以网上文档比较少. 打开网站管理页面: http://localhost:6080/arcgis/manager/ 点左边Utilities

  9. JUnit 4.x 知识点

    注解 @Test: 测试方法,在这里还可以测试期望异常和超时时间. @Before: 每个测试方法执行之前执行的方法. @BeforeClass: 一个测试类中所有测试方法执行之前执行的方法,只执行一 ...

  10. MongoDB 大数据技术之mongodb中在嵌套子文档的文档上面建立索引

    一.给collection objectid赋自定义的值 MongoDB Enterprise > db.testid.insert({_id:{imsi:"4567890123&qu ...