安卓推送——个推服务端api使用误区

时间:2022-12-22 11:38:44

首先你需要在个推开放着平台上注册你的应用,以及获得以下几个必要的值APPID |APPKEY | MASTERSECRET,本文假设你已经完成上述步骤以及完成客户端SDK的集成。

原理

个推服务端api的原理非常简单,组装一个对象,塞进去需要的值,然后编码一下通过http请求发送到个推的推送服务器上,后面的复杂的推送流程就全权交给个推服务器了。
当然尽管原理非常简单,个推服务端api还是做了一些封装,最大限度节省用户工作量,比如组装对象设置特定的数据结构并编码,以及一些额外参数以完成版本的向后兼容等动作。

介绍

个推服务端sdk有多种语言支持,JAVA / Python / C# / PHP / GoLang等等,本文以JAVA版本为例介绍使用方法。

首先需要引入服务端sdk,也就是下面几个jar包,下载地址在个推官网上有

看名字很好理解这些jar包的作用,对于前三个commons开头的,codec是用来编码的,httpclient是用来构造http请求的,logging处理日志的;带sdk的三个jar自然是个推封装的组装请求的逻辑,以及提供对用户开放的使用接口;最后两个是用到的数据结构json和protobuf。

业务场景

单推——推送指定客户端推送
IPushResult pushMessageToSingle(SingleMessage message, Target target)
业务场景:一般适用于指定某个特定用户的推送,比如你要告诉某个用户他租的域名再不续费就要到期啦,或者有个好友@你啦,这种和独立用户紧密相关的个人消息。

群推——批量指定客户端推送
IPushResult pushMessageToList(String contentId, List targetList)
业务场景:一般适用于为某些用户推送消息的场景,比如你提取了一批今天生日的用户列表,给他们发送生日祝福等。

群推——指定应用名称全客户端推送
IPushResult pushMessageToApp(AppMessage message)
业务场景:一般适用为自己应用的所有用户推送同一条消息,比如今年2.14情人节,本店全场5折起之类的消息。

当然以上提到的业务场景只是暂时想到的,你完全可以套用到自己的业务场景里,组合使用各个接口,完成更多元的功能。

使用方式

各个接口使用方式大同小异,如果理解了原理应该很容易融会贯通。我将结合代码,以单推——toSingle接口来讲解使用方法。

  1. 首先定义一些常量,我们应用的appId,appkey等值
    private static String appId = "aK6jeksP5C7CsjSSEqLAA3";
    private static String appKey = "tpDVam96sY8pxhwBupJ462";
    private static String masterSecret = "TBokfpttQJ6aHIhBE9y867";
    private static String cid = "ce018bb633066839fd0d6fb448bfcb23";
    private static String url = "http://sdk.open.api.igexin.com/apiex.htm";

  2. 新建一个IGtPush实例,传入调用接口网址,appkey和masterSecret
    IGtPush push = new IGtPush(url, appKey, masterSecret);

  3. 新建一个消息类型,单推一个用户的话,使用SingleMessage
    除了SingleMessage外还有ListMessage和AppMessage分别对应三个推送接口
    SingleMessage message = new SingleMessage();

  4. 新建一个推送模版,已透传模板为例,透传顾名思义到达客户端后不做任何操作,由app选择处理
    其他原生模板类型种类很多,支持各种客户端展现效果,包括弹框下载、打开链接等等。模板里也可以设置响铃震动等效果。
    TransmissionTemplate template = new TransmissionTemplate();
    template.setAppId(appId);
    template.setAppkey(appKey);
    template.setTransmissionContent("测试用的透传文本");
    template.setTransmissionType(1);

  5. 模板设置好后塞进message里,同时可以配置这条message是否支持离线,以及过期时间等,单位毫秒
    若设置离线,个推推送系统会为当前不在线的用户缓存离线消息,个推现在支持为每个用户缓存多条离线消息,离线时间最多三天,三天后会删除该条离线消息
    message.setData(template);
    message.setOffline(true);
    message.setOfflineExpireTime(1800 * 1000);

  6. 新建一个推送目标,填入appid和clientId
    单推情况下只能设置一个推送目标,toList群推时,可以设置多个目标,目前建议一批设置50个左右。
    Target target = new Target();
    target.setAppId(appId);
    target.setClientId(cid);

  7. 调用IGtPush实例的toSingle接口,参数就是上面我们配置的message和target
    IPushResult result = push.pushMessageToSingle(message, target);
    String response = result.getResponse().toString();
    System.out.println("返回值:" + response);

误区一

推送选错接口
个推服务端adk提供给开发者三个推送接口:pushMessageToSingle/ pushMessageToList/ pushMessageToApp。从命名来看也容易区分,分别是推送单个用户,一批用户,一个应用的全部用户。对于每个接口,个推服务端的处理逻辑不尽相同,在性能上也有差别。一般来说推送性能是pushMessageToApp > pushMessageToList > pushMessageToSingle。其中ToList和ToSingle的使用频率最高。有些开发者在ToList的场景里选用ToSingle接口,这样就会明显影响推送效率,ToSingle是适合单推特定用户的场景,如果推送内容相同,将推送的对象集合起来,调用ToList接口,可以明显提升性能。但是对于适合单推的场景使用ToList又会明显降低性能,因为如果每次推送内容不同。调用ToList之前都需要调用getContentId上传消息体,这样至少从http请求次数来说,已经不合算了。

误区二

推To List接口列表太大
ToList的性能更高在某个方面来说是因为其一次上传了更多的clientId。但是我们不建议一批列表里放太多的clientId,把鸡蛋放在一个篮子里是有风险的。而且从另一方面来说,过于巨大的消息体可能会在各个层面出现意料之外的异常。目前我们建议一批列表里放置不超过100个clientId。这样100万的用户,你需要调用一万次toList接口。

误区三

频繁调用getContentId
在调用ToList之前,需要先调用getContentId上传推送消息体到个推服务器并获取一个contentId。后续调用toList只需要上传这个contentId和clientId列表就行。这意味着,如果你需要给100万的用户推送相同内容的消息,每次调用ToList发送100个,那就需要循环调用1万次ToList接口。而这中间,无需再调用getContentId!只需要复用同一个contentId!因为他们的推送消息体是一样的。这里经常会有开发者没有注意,每次都调用一次getContentId再去调用toList接口。这样对推送性能会造成巨大损失,因为你不仅double了http请求次数,而且getContentId相对来说在个推服务器上也是一个耗时操作。因此,如果你现在正不小心这样错误使用着个推的服务端api,请赶快调整,飞一样的性能提升肯定会让你眼前一亮的。

安卓推送——个推服务端api使用误区的更多相关文章

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

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

  2. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

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

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

  4. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  5. 友盟推送 .NET (C#) 服务端 SDK rest api 调用库

    友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...

  6. android手机推送视频到服务端

    项目需求,android手机向服务器推送视频.苦战几个星期终于实现,现记录下来以免以后忘记. 没做过Java,也没做过Android开发,只能现学现卖.在网上找了下搭建开发a  ndroid环境资料, ...

  7. 极光推送>>java SDK服务端集成后台项目(使用详解)

    PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看 极光文档(java SDK)请参考 [ 极光文档 ] 步骤一: 首先,你必须在 [极 ...

  8. java SDK服务端推送 --极光推送(JPush)

    网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...

  9. android推送-PHP(第三方推送:个推)

    在项目初期,就安卓推送功能怎么做,曾经参考过例如XMPP之类的推送方法.但苦于那些是些英文档案,又没太多时间研究,所以打算采用第三方推送(个推,极光推送等),后来在美图技术老大推荐下用采用个推. PS ...

随机推荐

  1. 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1012  Solved: 566[Submit][S ...

  2. hibernate报错Unknown integral data type for ids : java.lang.String

    package com.model; // Generated 2016-10-27 14:02:17 by Hibernate Tools 4.3.1.Final /** * CmDept gene ...

  3. TV端产品设计法则和分析

    对TV端产品设计的分析太特么少了.翻遍网络,大多也是针对UI设计的分析,这篇从产品设计的角度,梳理下现有的TV端产品设计法则,顺道做点分析.(前方多图,高能预警) 目录: 1. TV端产品使用场景 2 ...

  4. hosts文件的作用 whois查询域名信息

      Whois查询域名信息 在操作系统中的路径:Window98—在Windows目录下Windows 2000/XP—在C:\WINDOWS\system32\drivers\etc目录下 内容:包 ...

  5. 知识总结: Activity的四种启动模式

    通常情况下,一个应用有一个Task,这个Task就是为了完成某个工作的一系列Activity的集合.而这些Activity又被组织成了堆栈的形式.当一个Activity启动时,就会把它压入该Task的 ...

  6. wbadmin delete backup删除服务器旧的镜像备份

  7. STL该反应堆运行

    首先来看全然二叉树的定义: 若设二叉树的深度为h,除第 h 层外,其他各层 (1-h-1) 的结点数都达到最大个数,第 h 层全部的结点都连续集中在最左边,这就是全然二叉树.而将一维数组视为全然二叉树 ...

  8. wemall doraemon中Android app商城系统向指定URL发送GET方法的请求代码

    URL的openConnection()方法将返回一个URLConnection对象,该对象表示应用程序和 URL 之间的通信链接.程序可以通过URLConnection实例向该URL发送请求.读取U ...

  9. HNOI2017 抛硬币 (FakeBeng)

    除了队长快跑外最难的题吧. 除了需要写\(exLucas\)之外,还教会了我大量的卡常技巧. 首先\(70\)分就是个直接按题意模拟,易得\(ans=\sum_{j=0}^{b} C_{b}^{j}\ ...

  10. 关于ugc的一点思考

    ugc会使互联网繁荣,但依赖大众用户创造的内容质量上会存在参差不齐,这是ugc本身存在的问题. 就拿技术论坛或社区来说,好的内容不少,但质量不好的内容也很多.社区在引导用户发言的同时,也应 对用户创造 ...