极光推送 java集成

**移动端设备: **
Android:走自建的TCP长连接通道
iOS : 走自家的系统推送通道,
WinPhone: 走自家的系统推送通道,
那么意味着你服务端要维护这三套推送系统。

极光推送是:使得开发者可以即时地向其应用程序的用户推送通知或者消息,与用户保持互动,从而有效地提高留存率,提升用户体验。简单的说就是通过JPush后台管理网站进行app消息的推送。可以让用户及时的收到最新的消息提示。
但是往往有时候需要我们自己开发自己的后台管理网站实现推送的功能,这个时候就需要调用JPush提供的API接口,来进行消息的推送。这里我只讲一些核心API接口,JPush 当前支持 Android, iOS, Windows Phone 三个平台的推送。其关键字分别为:"android", "ios", "winphone"。

服务端主动推送到客户端的原理:
目前服务端给客户端推送,普遍做法是客户端与服务端维持一个长连接,客户端定时向服务端发送心跳值以维持这个长连接。当有新消息过来的时候,服务端查出该消息对应的TCP Channel的ID并找到对应的通道进行消息下发。
这只是最基本的通讯模型,在此之上,有衍生出针对消息的发布/订阅模型,客户端可以订阅某一个Topic,服务端根据Topic找到对应的Channel进行批量的消息下发。所有的客户端隐式的订阅的all这个opic,所以『类似中国移动给全网信号内所有手机发消息的模式』亦可以理解『广播消息』,即给all这个Topic发消息。

下面是[Java]后台的代码部分:

调用地址
POST https://api.jpush.cn/v3/push

public class JPushClientExample {  
    //在极光注册上传应用的 appKey 和 masterSecret  
    private static final String appKey ="a148767f7440ff9daf56457f";//必填,例如466f7032ac604e02fb7bda89  
    private static final String masterSecret = "731e374afd796d5942ba1363";//必填,每个应用都对应一个masterSecret  
    private static JPushClient jpush = null;  
/*调用验证
*HTTP Header(头)里加一个字段(Key/Value对):
*Authorization: Basic base64_auth_string 其中 base64_auth_string 的生成算法为:*base64(appKey:masterSecret)即,对 appKey 加上冒号,加上 masterSecret 拼装
*起来的字符串,再做 base64 转换
*/
    /* 
     * 保存离线的时长。秒为单位。最多支持10天(864000秒)。 
     * 0 表示该消息不保存离线。即:用户在线马上发出,当前不在线用户将不会收到此消息。 
     * 此参数不设置则表示默认,默认为保存1天的离线消息(86400秒 
     */  
    private static long timeToLive =  60 * 60 * 24;    
    public static void main(String[] args) {  
        /* 
         * Example1: 初始化,默认发送给android和ios,同时设置离线消息存活时间 
         * jpush = new JPushClient(masterSecret, appKey, timeToLive); 
         *  
         * Example2: 只发送给android         *  
         * Example3: 只发送给IOS 
         * jpush = new JPushClient(masterSecret, appKey, DeviceEnum.IOS); 
         *  
         * Example4: 只发送给android,同时设置离线消息存活时间 
         * jpush = new JPushClient(masterSecret, appKey, timeToLive, DeviceEnum.Android); 
         */  
        jpush = new JPushClient(masterSecret, appKey, timeToLive);  
        /*  
         * 是否启用ssl安全连接, 可选 
         * 参数:启用true, 禁用false,默认为非ssl连接 
         */  
        jpush.setEnableSSL(true);  
  
        //测试发送消息或者通知  
        testSend();  
    }  
推送字段解说.png
    private static void testSend() {  
        // 在实际业务中,建议 sendNo 是一个你自己的业务可以处理的一个自增数字。  
        // 除非需要覆盖,请确保不要重复使用。详情请参考 API 文档相关说明。  
//      Integer num= getRandomSendNo();  
        String sendNo="1900192560";  
        String msgTitle = "Hi, JPush!";  
        String msgContent = "我是JPush测试信息,已经成功发送给你,请查收。";      
        /* 
         * IOS设备扩展参数, 
         * 设置badge,设置声音 
         */  
        Map<String, Object> extra = new HashMap<String, Object>();  
        IOSExtra iosExtra = new IOSExtra(1, "WindowsLogonSound.wav");  
        extra.put("id1",iosExtra);  
        extra.put("id2","I am extra infomation");  
        //IOS和安卓一起  
        MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra);  
        //对所有用户发送通知, 更多方法请参考文档  
    //  MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle, msgContent);  
        if (null != msgResult) {  
            System.out.println("服务器返回数据: " + msgResult.toString());  
            if (msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {  
                System.out.println("发送成功, sendNo=" + msgResult.getSendno());  
            } else {  
                System.out.println("发送失败, 错误代码=" + msgResult.getErrcode() + ", 错误消息=" + msgResult.getErrmsg());  
            }  
        } else {  
            System.out.println("无法获取数据");  
        }     
    }  
    public static final int MAX = Integer.MAX_VALUE;  
    public static final int MIN = (int) MAX/2;  
    /** 
     * 保持 sendNo 的唯一性是有必要的 
     * It is very important to keep sendNo unique. 
     * @return sendNo 
     */  
    public static int getRandomSendNo() {  
        return (int) (MIN + Math.random() * (MAX - MIN));  
    }  
}

状态码.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据...
    原军锋阅读 34,546评论 4 60
  • 版本记录 前言   现在很多APP都有推送功能,其中极光推送就是很多APP的首选。我们最近的几个APP也是用的极光...
    刀客传奇阅读 8,372评论 0 8
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,857评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,637评论 18 139
  • 版本记录 前言   前一篇已经对极光推送产品架构和服务进行了介绍,这一篇则只对ios客户端的集成和使用等状况进行了...
    刀客传奇阅读 1,127评论 0 0