Date:2019-11-11

读前思考:

  极光推送是什么?

  极光推送是能做什么?有什么优势?

  怎么根据业务需求来实现极光推送服务呢?

简介

极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供移动消息推送服务。

极光先后推出了极光即时通讯云(JMessage)、极光短信服务(JSMS)、极光统计(JAnalytics)、极光分享(JShare)等开发者服务。 
极光IM(JMessage) 致力于帮助app解决应用内聊天及跨应用聊天问题,快速集成SDK,提供稳定可靠的APP用户间聊天功能。
极光短信(JSMS) 为开发者提供短信下发功能,包括验证码类短信、通知类短信和营销类短信三大类。
极光统计(JAnalytics) 提供整合Android、iOS的统计服务。
极光分享帮助应用具备国内主流社交平台分享功能,提供新浪微博、QQ、微信等第三方社会化分享服务,提高产品推广效率,帮助产品提高用户体验,获得更多用户。

极光官方文档:https://docs.jiguang.cn/

极光社区https://community.jiguang.cn/

    遇到问题,可以在这里找到相应的解决办法。

服务端 REST API :https://docs.jiguang.cn/jpush/server/push/server_overview/

server_sdk:https://docs.jiguang.cn/jpush/server/server_sdk/

JPush REST API 的 Java 版本封装开发包,是由极光推送官方提供的,一般支持最新的 API 功能。

对应的 REST API 文档:[REST API - Push](https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/),

[REST API - Report](https://docs.jiguang.cn/jpush/server/push/rest_api_v3_report/).

本开发包 Javadoc:[API Docs](http://jpush.github.io/jpush-api-java-client/apidocs/)

版本更新:[Release页面](https://github.com/jpush/jpush-api-java-client/releases)

极光推送测试

先注册账号:https://www.jiguang.cn/

登录账号创建应用获取AppKey以及Master Secret

开发者服务: https://www.jiguang.cn/dev2/#/app/a76cf62afbe91d4b57f4c36e/info

示例代码:

JPushUtil

package com.joey.jpush.test1;
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.Notification;
import java.util.List; /**
* 极光推送工具类 https://github.com/
* @Probject JPushUtil
* @Create By Joey
* @Create IN 2019-11-12
**/
public class JPushUtil {
/**
* 所有平台,所有设备,内容为 content 的通知
* @param content
* @return
*/
public static PushPayload buildPushObjectAllAlert(String content) {
return PushPayload.alertAll(content);
}
/**
* 根据 设备终端ID 推送消息
* @param regesterIds 设备终端ID集合
* @param content 内容
* @return
*/
public static PushPayload buildPushObjectByregesterIds(List<String> regesterIds, String content) {
return PushPayload.newBuilder().setPlatform(Platform.all())
.setAudience(Audience.registrationId(regesterIds))
.setNotification(Notification.alert(content))
.build();
}
/**
* 所有平台,推送目标是别名为 "alias",通知内容为 TEST
* @param alias
* @param content
* @return
*/
public static PushPayload buildPushObjectAliasAlert(String alias, String content) {
return PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.alias(alias))
.setNotification(Notification.alert(content)).build();
}
}
JpushService:
package com.joey.jpush.test1;
import java.util.List; public interface JpushService {
/**
* 所有平台推送消息内容
* @return
*/
public boolean pushAll(); /**
* 指定的设备推送消息内容
* @param regeSterIds
* @param msg
* @return
*/
public boolean pushByRegesterId(List<String> regeSterIds, String msg);
}
JpushServiceImpl:
package com.joey.jpush.test1;

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.PushPayload;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.List; /**
* @Probject JpushServiceImpl
* @Create By Joey
* @Create IN 2019-11-12
**/
@Service("jpushService")
public class JpushServiceImpl implements JpushService {
//AppKey
private final static String appKey = "a76cf62afbe91d4b57f4c36e";
//Master Secret
private final static String masterSecret = "34960b30f9cec35615156a4d ";
/**
* 保存离线的时长。秒为单位。最多支持10天(864000秒)。
* 0 表示该消息不保存离线。
* 即:用户在线马上发出,当前不在线用户将不会收到此消息。
* 此参数不设置则表示默认,默认为保存1天的离线消息(86400秒)。
*/
private static long timeToLive = 60 * 60 * 24;
private static JPushClient jPushClient = null;
private static final Logger logger = LoggerFactory.getLogger(JpushServiceImpl.class); @Override
public boolean pushAll() {
jPushClient = new JPushClient(masterSecret, appKey, (int) timeToLive);
boolean flag = false;
try {
String title = "小姐姐,再抱抱我.真的好舒服呢"; //推送对象
PushPayload payload = JPushUtil.buildPushObjectAllAlert(title); //推送结果
PushResult result = jPushClient.sendPush(payload);
if (null != result) {
flag = true;
}
} catch (APIConnectionException e) {
logger.error("Connection error. Should retry later. ", e);
flag = false;
} catch (APIRequestException e) {
logger.error("Error response from JPush server. Should review and fix it. ", e);
logger.info("HTTP Status: " + e.getStatus());
logger.info("Error Code: " + e.getErrorCode());
logger.info("Error Message: " + e.getErrorMessage());
logger.info("Msg ID: " + e.getMsgId());
flag = false;
}
return flag;
} @Override
public boolean pushByRegesterId(List<String> regeSterIds, String msg) {
jPushClient = new JPushClient(masterSecret, appKey);
boolean flag = false;
try {
//推送对象
PushPayload payload = JPushUtil.buildPushObjectByregesterIds(regeSterIds, msg); //PushResult 表示服务端推送结果
PushResult result = jPushClient.sendPush(payload);
if (null != result) {
flag = true;
}
} catch (APIConnectionException e) {
logger.error("Connection error. Should retry later. ", e);
flag = false;
} catch (APIRequestException e) {
logger.error("Error response from JPush server. Should review and fix it. ", e);
logger.info("HTTP Status: " + e.getStatus());
logger.info("Error Code: " + e.getErrorCode());
logger.info("Error Message: " + e.getErrorMessage());
logger.info("Msg ID: " + e.getMsgId());
flag = false;
}
return flag;
}
}

注意:appKey和masterSecret是从你创建应用的时候,生成的。

做完测试之后,推送的原理是什么?

极光推送原理

推送是手机中非常常见的功能了,可是在实现上iOS和Andriod却有很大的差别。

如上图:

1.你的IOS应用需要去注册APNS消息推送功能。

2.当苹果APNS推送服收到来自你应用的注册消息就会返回一串device token给你(很重要)

3.将应用收到的device Token传给你本地的Push服务器。

4.当你需要为应用推送消息的时候,你本地的推送服务器会将消息,以及Device Token打包发送到苹果的APNS服

5.APNS再将消息推送给目的iphone

极光推送(JPush)开篇的更多相关文章

  1. 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 ...

  2. 关于极光推送Jpush的demo

    关于极光推送Jpush 推送是手机app必不可少的一样功能,这次由于公司项目需要研究了一下.由于推送一般写于服务端,所以对于不会Android的javaweb程序员要写出一个完整的demo是一件很头痛 ...

  3. 李洪强iOS开发之极光推送JPush

    李洪强iOS开发之极光推送JPush

  4. 极光推送JPush的快速集成

    首先到极光推送的官网上创建一个应用,填写对应的应用名和包名. 创建好之后下载Demo 提取Sdk里面的图片和xml等资源文件放自己项目的相应位置,然后要注意的是.so文件的放置位置: 在main目录下 ...

  5. 极光推送Jpush(v3)服务端PHP版本的api脚本类

    原文地址:http://www.dodobook.net/php/780 关于极光推送的上一篇文章已经说明了,此处就不多说了.使用v3版本的原因是v2使用到2014年年底就停止了.点击查看上一篇的地址 ...

  6. 极光推送Jpush(v3)服务端PHP版本集成(V3版本只调用推送API)

    因为版本升级,极光推送的API也有了V3,功能也更丰富了,但是对于我们有的用户来说,我们还是只需要调用推送的API就够了. 下载了一份PHP服务端的SDK(下载地址:http://docs.jpush ...

  7. 极光推送 JPush 简介 集成 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. Ionic5整合极光推送JPush ( 简单 )

    项目初始化 1. 安装项目依赖: # 安装cordova插件 ionic cordova plugin add jpush-phonegap-plugin --variable APP_KEY=&qu ...

  9. 极光推送Jpush功能(具体参照官网说明文档,注意此文红色字体)

    1.导入框架 2. //推送 #import "APService.h" - (BOOL)application:(UIApplication *)application didF ...

随机推荐

  1. MySQL 5.7安装最佳实践

    MySQL 5.7安装最佳实践 1.环境准备OS: CentOS Linux release 7.4.1708 (Core) for VMwareMySQL: mysql-5.7.24-linux-g ...

  2. 分享:JS视频在线视频教程

    作者说明 (1)JS说明 JS是非常重要的一门语言,但是,我们对JS的认识似乎仍然停留在“hello word”或者“alert”的观念上.其实,JS发展到现在已经非常的成熟,功能也非常的强大,因此, ...

  3. [Luogu2458][SDOI2006]保安站岗

    题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...

  4. 事业单位招聘网搭建思路和seo方法

    期望目标 自动采集事业单位招聘信息+自动发布到网站+自动提交网址到百度+自动发外链. 技术框架 前端用layUI,后端用flask,数据库用的elasticsearch,编程语言用Python 3.7 ...

  5. Halcon安装注意事项

    安装使用评估版本 下载并安装 在ihalcon中下载halcon,版本随意,因为我也不知道怎么选择适合自己的版本,那就下载一个比较新的版本,19.05版本. 安装目录默认在C:\Program Fil ...

  6. shell基本运算符(五)

    shell支持多种运算符,包括:算术运算符.关系运算符.布尔运算符.字符串运算符.文件测试运算符. 注意:条件表达式要放在方括号之间,并且要有空格,eg:[$a==$b] 是错误的,必须写成 [ $a ...

  7. 6. SSH远程管理服务实战

    1. SSH基本概念? ssh是一个应用层安全协议 2.SSH主要的功能是? 实现远程登录, 数据传输过程中进行加密. 钉钉(澡堂模式) 远程登录: ssh telnet 3.SSH与Telnet之间 ...

  8. 算法问题实战策略 DICTIONARY

    地址 https://algospot.com/judge/problem/read/DICTIONARY 解法 构造一个26字母的有向图 判断无回路后 就可以输出判断出来的字符序了 比较各个字母的先 ...

  9. 第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进 ...

  10. Mysql数据库(十一)事务与锁机制

    一.事务机制 1.事务的概念 事务是指一组互相依赖的操作单元的集合,用来保证对数据库的正确修改,保持数据的完整性,如果一个事务的某个单元操作失败,将取消本次事务的全部操作. 比如将A账户的资金转入B账 ...