关于极光推送Jpush的demo
关于极光推送Jpush
推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下。由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛的事情。所以我就在这里从头到尾写一个例子以示参考。由于我也不懂Android 只是由于项目需要百度了一个demo,当中有很多不足的地方忘各位大神指正。
一、首先先简单的介绍一下什么是极光推送
①为什么需要推送:为了解决数据同步的问题,在手机平台上,常用的方法有2种。一种是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。由于做推送在移动网络下维持长连接有一定的技术难度,而且当用户量上去的时候,需要很多服务器来维持长连接,成本也是很大的。因此我们需要一个第三方的jar包来支持我们的推送服务。如果想了解更多内容可参看极光推送官方文档。
②极光推送的通俗解答:就是把需要推送的内容通过调用jpush的api的发送到极光推送的服务器上,极光推送的服务器根据我们推送过去的内容选择推送到具体的app。
二、源码
服务端代码:http://pan.baidu.com/s/1bpH55uR
安卓客户端代码:http://pan.baidu.com/s/1jIqmN7S
安卓环境为:ADT+SDK+eclipse
ADT下载:http://pan.baidu.com/s/1dFmZlZF
SDK下载:http://pan.baidu.com/s/1kU53AUr
所需JDK的环境安装就不一一叙述了。
注:代码可直接导入只需要改几个地方后面会阐述。首先教大家搭下安卓环境先保证代码能导入成功
三、操作步骤
① 安装插件



②安装sdk



此步骤完成后页面会切换到Android的开发界面,页面会多两个东西

选择你要安装的一般选择Tools里面的和Android你所需要的版本,然后带你安装,我这里已经没有选,所以示灰色的。

注:关于安装很慢或者安装失败
有两种方法:
① 使用翻墙软件 我用的蓝灯
② 使用配置镜像服务器 如图:


③然后导入安卓工程(服务端的工程就不叙述怎么导入了)
在工程列表的空白处右键--选择import--然后操作如图

然后是运行安卓程序(最好是插上数据线--打开手机的usb调试--然后程序运行的时候回下到手机上)
具体的可以百度下。
四、极光推送的使用(肯定要到官网注册一个账号)
具体使用请百度,或者参照官网,下面是主要截图

appkey和master secret 后面会用到
五、修改Android配置文件,将appkey改成你所添加的应用的appkey

六、服务端代码展示,代码均有注释就不一一解释了
只用的到这三个代码
APPKET和MASTERSECRET 改成你在极光开发者服务添加的应用时所生产的字符串

package com.uxun.serviceImpl; import com.uxun.service.JPushService; import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification; public class JPushServiceImpl implements JPushService { private final static String APPKET = "44262636e2afd75d9b9f7932"; private final static String MASTERSECRET = "ae5c0ab5f093b2aba1f8ce25"; private static JPushClient jPushClient = new JPushClient(MASTERSECRET, APPKET);//通知默认保留24小时。 @Override
public int sendToRegistrationId(String registrationId, String notification_alert, String notification_title,
String extrasparam) {
int result = 0;
try {
PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithRegistrationId(registrationId,
notification_alert, notification_title, extrasparam);
System.out.println(pushPayload);
PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象
//System.out.println(pushResult);
if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功
result=1;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
} return result;
} @Override
public int sendToAll(String notification_alert, String notification_title, String extrasparam) {
int result = 0;
try {
PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithAll(notification_alert,
notification_title, extrasparam);
System.out.println(pushPayload);
PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象
//System.out.println(pushResult);
if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功
result=1;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
} return result;
} @Override
public int sendToAllIos(String notification_alert, String notification_title, String extrasparam) { int result = 0;
try {
PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithIos(notification_alert,
notification_title, extrasparam);
System.out.println(pushPayload);
PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象
//System.out.println(pushResult);
if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功
result=1;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
} return result;
} @Override
public int sendToAllAndroid(String notification_alert, String notification_title, String extrasparam) { int result = 0;
try {
PushPayload pushPayload= JPushServiceImpl.buildPushObjectWithAndroid(notification_alert,
notification_title, extrasparam);
System.out.println(pushPayload);
PushResult pushResult=jPushClient.sendPush(pushPayload); //发送推送对象
//System.out.println(pushResult);
if(pushResult.getResponseCode() == 200) { //状态码等于200 为成功
result=1;
}
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
} return result;
} /**
* 建立以唯一设备标识符推送的对象
* @param registrationId 唯一设备标识
* @param notification_alert 通知内容
* @param notification_title 通知标题
* @param extrasparam 扩展字段
* @return 返回推送对象
*/
private static PushPayload buildPushObjectWithRegistrationId(String registrationId, String notification_alert, String notification_title,
String extrasparam) {
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.all())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.registrationId(registrationId))
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notification_alert) //设置通知内容(必填)
.setTitle(notification_title) //设置通知标题(可选)
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",extrasparam)
.build()) //指定当前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(notification_alert)
//直接传alert
//此项是指定此推送的badge(应用角标)自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",extrasparam)
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
//取消此注释,消息推送时ios将无法在锁屏情况接收
// .setContentAvailable(true)
.build()) //指定当前推送的winPhone通知
/*.addPlatformNotification(WinphoneNotification.newBuilder()
.setAlert(notification_alert)
//.setTitle("")) //设置通知标题(可选)此标题将取代显示app名称的地方
.build())*/
.build())
.build();
} /**
* 建立推送所有用户的推送对象
* @param notification_alert 通知内容
* @param notification_title 通知标题
* @param extrasparam 扩展字段
* @return 返回推送对象
*/
private static PushPayload buildPushObjectWithAll(String notification_alert,
String notification_title, String extrasparam) {
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.all())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notification_alert) //设置通知内容(必填)
.setTitle(notification_title) //设置通知标题(可选)
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",extrasparam)
.build()) //指定当前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(notification_alert)
//直接传alert
//此项是指定此推送的badge(应用角标)自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",extrasparam)
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
//取消此注释,消息推送时ios将无法在锁屏情况接收
// .setContentAvailable(true)
.build()) //指定当前推送的winPhone通知
/*.addPlatformNotification(WinphoneNotification.newBuilder()
.setAlert(notification_alert)
//.setTitle("")) //设置通知标题(可选)此标题将取代显示app名称的地方
.build())*/
.build())
.build();
} /**
* 建立推送所有ios用户的推送对象
* @param notification_alert 通知内容
* @param notification_title 通知标题
* @param extrasparam 扩展字段
* @return 返回推送对象
*/
private static PushPayload buildPushObjectWithIos(String notification_alert,
String notification_title, String extrasparam) {
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.ios())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder() //指定当前推送的iOS通知
.addPlatformNotification(IosNotification.newBuilder()
//传一个IosAlert对象,指定apns title、title、subtitle等
.setAlert(notification_alert)
//直接传alert
//此项是指定此推送的badge(应用角标)自动加1
.incrBadge(1)
//此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
// 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
.setSound("sound.caf")
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("iosNotification extras key",extrasparam)
//此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
//取消此注释,消息推送时ios将无法在锁屏情况接收
// .setContentAvailable(true)
.build())
.build())
.build();
} /**
* 建立推送所有安卓用户的推送对象
* @param notification_alert 通知内容
* @param notification_title 通知标题
* @param extrasparam 扩展字段
* @return 返回推送对象
*/
private static PushPayload buildPushObjectWithAndroid(String notification_alert,
String notification_title, String extrasparam) {
return PushPayload.newBuilder()
//指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
.setPlatform(Platform.android())
//指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
.setAudience(Audience.all())
//jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
.setNotification(Notification.newBuilder()
//指定当前推送的android通知
.addPlatformNotification(AndroidNotification.newBuilder()
.setAlert(notification_alert) //设置通知内容(必填)
.setTitle(notification_title) //设置通知标题(可选)
//此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
.addExtra("androidNotification extras key",extrasparam)
.build())
.build())
.build();
} }
运行服务端代码后手机会受到如下通知:
其实就是服务端通过唯一识别的appkey和master secret将通知发送到极光服务器,服务器再转发至对应的app(上面app的配置文件里也配置了appkey)

具体操作就是这么多,可能不是很详细,但是操作步骤实在太多,就不一一截图了,这里只给大部分的具体方向。
关于极光推送Jpush的demo的更多相关文章
- 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco
Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...
- 李洪强iOS开发之极光推送JPush
李洪强iOS开发之极光推送JPush
- 极光推送JPush的快速集成
首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...
- 极光推送 JPush 简介 集成 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 极光推送Jpush(v3)服务端PHP版本的api脚本类
原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...
- 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)
因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...
- 极光推送(JPush)开篇
Date:2019-11-11 读前思考: 极光推送是什么? 极光推送是能做什么?有什么优势? 怎么根据业务需求来实现极光推送服务呢? 简介 极光推送(JPush)是独立的第三方云推送平台,致力于为全 ...
- Ionic5整合极光推送JPush ( 简单 )
项目初始化 1. 安装项目依赖: # 安装cordova插件 ionic cordova plugin add jpush-phonegap-plugin --variable APP_KEY=&qu ...
- 极光推送Jpush功能(具体参照官网说明文档,注意此文红色字体)
1.导入框架 2. //推送 #import "APService.h" - (BOOL)application:(UIApplication *)application didF ...
随机推荐
- ubuntu下发布asp.net core并用nginx代理之旅(续)
前面实现了ubuntu下的发布,然而实际项目一般为visual studio中发布文件系统,然后上传至生产环境中,(部分参考:上传文件到linux - ubuntu) 这节就发布到生产环境中的: 1. ...
- 【Centos7】安装mysql5.7.16.tar.gz
操作系统 centos7.1 云主机 1.下载好了压缩包到windows电脑上 2.使用Smartty的SCP传输到云主机的/home/xxx/下 3.解压 tar xvf mysql-5.7.16 ...
- Python3使用Print输出带颜色字体
Phton3使用print输出带颜色的彩色字体 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义序列是以ESC开头,即用\03 ...
- JavaWeb(七)Cookie,EL表达式,标准标签库
Cookie Cookie概述 Cookie译为小型文本文件或小甜饼,Web应用程序利用Cookie在客户端缓存服务器端文件.Cookie是以键值对形式存储在客户端主机硬盘中,由服务器端发送给客户端, ...
- 2_linux 常用基本命令
相信当你看到此帖子时,你已不再是当年那个颓废的你,你一定也在追梦的路上奔跑,那么请留下你的“梦”,让我们用心去交流,好吗? 废话不多说,直接说正事! 一.查看磁盘分区 1.fdisk -l 查看磁盘 ...
- C# 实现模拟登录功能,实现公共类分享。
前言 最近在研究模拟登录的各种方法, 主要想要实现的两个功能是: 1.点击按钮可以直接跳转并登录到某一个系统中. 2.抓取某一个系统中某一个页面中的特定数据. 为此在网上查了许多的资料,首先了解到自身 ...
- os.path python使用遍历文件夹文件
import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirnames,filenames in ...
- Mysql数据库索引
今天,我们来讲讲Mysql数据库的索引的一些东西,想必大家都知道索引能干吗?必然是查找数据表的时候,查找的速度快啊,尤其是那些几百万行的数据库,不建立索引,你是想考验用户的耐心吗?Mysql有多种存储 ...
- Day-6: 函数式编程
函数式编程就是封装成一个个函数,一次调用来完成复杂任务. 函数式编程的一个特点是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! 高阶函数 高阶函数就是将函数的变量名作为参数传入,内部再对 ...
- window.onerror 应用实例
详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp75 window.onerror = function(sMessa ...