Android使用个推实现三方应用的推送功能
ps:用了一下个推.感觉实现第三方应用的推送功能还是比较简单的.官方文档写的也非常的明确.
学习内容:
1.使用个推实现第三方应用的推送.
所有的配置我最后会给一个源代码,内部有相关的配置和文档来帮助大家完成配置,在这里就不进行介绍了.
感觉需要写的东西不是非常的多,因为官方的文档已经写的非常的明确了,如何进行配置,导入jar包,.so文件,以及androidmanifest的文件的相关配置都写的非常的明确.我这里就稍微的简单介绍一下.注册账号什么的我就不说了,这些基本的东西没有减少的必要性.
i.pushmanager
pushmanager是实现推送的核心类,可以进行推送控制,设置标签,设置别名,设置默认时间等.所有的接口都由这个对象去调用.因此我们需要初始化pushmanager对象.
对象的创建方式是单列的.因此拿到的对象也就具有唯一性.这里获取到pushmanager对象的同时去初始化个推服务,接口调用之后个推服务后台运行,通过广播的方式将cid发送给app.这里其实最重要的就是这个广播,其他的东西都没有什么重点的地方.只需要稍微的注意一下即可.
ii.getuipushreceiver app接收cid的广播
package com.example.totem.getuidemo.receiver; import android.content.broadcastreceiver; import android.content.context; import android.content.intent; import android.os.bundle; import com.igexin.sdk.pushconsts; import com.igexin.sdk.pushmanager; /** * created by totem on 2016/8/15. * @author 代码丶如风 */ public class getuipushreceiver extends broadcastreceiver { public static string key_client_id = "push_notification_client_id"; public static string message; public static void init(context context){ /** * 初始化对象 * 可以进行推送控制,设置标签,设置别名,设置默认时间等 * 所有接口都由该对象调用 * */ pushmanager.getinstance().initialize(context); /** * 获取clientid * */ string clientid = pushmanager.getinstance().getclientid(context); if(clientid != null){ key_client_id = clientid; } } @override public void onreceive(context context, intent intent) { //相关处理 } private static ongetpushmessagelistener ongetpushmessagelistener; public static void setongetpushmessagelistener(ongetpushmessagelistener ongetpushmessagelistener) { getuipushreceiver.ongetpushmessagelistener = ongetpushmessagelistener; } /** * 对外暴露接口 * */ public interface ongetpushmessagelistener{ void getostfmessage(string message); } }
这个广播是接收推送消息的核心类,其实实现起来也是比较简单的,首先就是获取pushmanager对象,然后初始化个推服务,在onreceiver方法中对传递过来的数据进行判断,这里只对两种状态进行了判断,一种是推送通知,另一种则是透传消息.
@override public void onreceive(context context, intent intent) { bundle bundle = intent.getextras(); switch (bundle.getint(pushconsts.cmd_action)){ /** * 推送通知 * */ case pushconsts.get_clientid: string cid = bundle.getstring("clientid"); break; /** * 透传消息,传递过来的是json字符串.一般而言需要客户端进行解析. * */ case pushconsts.get_msg_data: string appid = bundle.getstring("appid"); byte[] payload = bundle.getbytearray("payload"); string taskid = bundle.getstring("taskid"); string messageid = bundle.getstring("messageid"); if(payload != null){ /** * 如果拿到的数据不为空.那么做相关的处理 * */ message = new string(payload); ongetpushmessagelistener.getostfmessage(message); }else{ message = ""; } break; } }
这样通过判断,我们就可以得知,是推送通知,还是透传消息等等.最后写了一个对外界暴露的接口,其实就对activity暴露接口,当我们在广播中接收到了数据发生了变化,或者是有数据传递过来,需要通过这个接口的方式,告知数据产生了变化,需要主进程做相关的处理,这是暴露接口的目的.然后在主页面中,我们只需要实现这个接口就可以了.
getuipushreceiver.setongetpushmessagelistener(new getuipushreceiver.ongetpushmessagelistener() { @override public void getostfmessage(string message) { if(message!=null){ messagedata.add(message); } } });
iii.打开推送
turnonpush(context)方法,用于打开推送,如果我们不主动打开推送的话,就算是后台发送了推送消息,我们也是接收不到的.在默认的状态下是开启状态.
iv.关闭推送服务
turnoffpush(context)方法,用于关闭推送服务.这个方法执行之后,就无法收到推送服务了,需要注意的是,想要再次接收到推送,必须使用turnonpush(context)方法.其他方法无效.
v.停止sdk服务.
stopservice(context).停止sdk服务之后,服务不会终止运行,而是终止推送和联网功能.重新启动需要调用initalize()方法或者是turnonpush()方法.
基本的东西都介绍完了,还有一些设置标签,静默时间,绑定别名什么的,大家如果有兴趣可以自己去研究下,反正我是暂时没有使用到.因此就先不动这几个模块了.我们就来看看如何使用个推后台来实现推送吧.
首先我们需要创建自己的应用,然后我们可以在应用配置当中获取到我们想要的数据,具体效果如下.
这里有我们想要的数据,appid,appkey等等,这些东西都需要在androidmanifest文件中进行配置.自己做好demo之后,就可以通过后台发送推送了.
标题和内容都是必填项,然后一直确定就可以了,这样消息就被推送出去了.在app上打开推送服务,就可以接收到推送了.透传消息我就不进行截图了.需要注意的一点就是透传消息是json格式的字串.个推为我们提供好了json的格式化工具.
最后放上一个源代码,这个源代码是无法运行的,因为这里是使用我自己的后台,大家也需要去创建账号,用自己的后台去创建应用,然后把androidmanifest文件中的appid,appkey,appsecret进行修改.并且内部提供了很多文档,帮助大家去集成,点击下载。
推荐阅读
-
Android使用个推实现三方应用的推送功能
-
android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec(二)
-
android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec
-
Android之简单的登录界面的实现、使用 AlertDialog和全局广播实现被强制下线功能、自定义一个带有清除按钮的EditText
-
android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec(二)
-
安卓/android一个倒计时时钟,创建子线实现计时功能,使用异步消息机制将计时结果显示在界面上,使用Handle的sendMessage传送给子线程,然后在handlemessage实现
-
android硬编码h264数据,并使用rtp推送数据流,实现一个简单的直播-MediaCodec