PS:用了一下个推.感觉实现第三方应用的推送功能还是比较简单的.官方文档写的也非常的明确.

学习内容:

1.使用个推实现第三方应用的推送.

  

  所有的配置我最后会给一个源代码,内部有相关的配置和文档来帮助大家完成配置,在这里就不进行介绍了.

  感觉需要写的东西不是非常的多,因为官方的文档已经写的非常的明确了,如何进行配置,导入jar包,.so文件,以及AndroidManifest的文件的相关配置都写的非常的明确.我这里就稍微的简单介绍一下.注册账号什么的我就不说了,这些基本的东西没有减少的必要性.

i.PushManager

  PushManager是实现推送的核心类,可以进行推送控制,设置标签,设置别名,设置默认时间等.所有的接口都由这个对象去调用.因此我们需要初始化PushManager对象.

  1. PushManager.getInstance().initialize(context);

对象的创建方式是单列的.因此拿到的对象也就具有唯一性.这里获取到PushManager对象的同时去初始化个推服务,接口调用之后个推服务后台运行,通过广播的方式将CID发送给App.这里其实最重要的就是这个广播,其他的东西都没有什么重点的地方.只需要稍微的注意一下即可.

ii.GeTuiPushReceiver app接收CID的广播

  1. package com.example.totem.getuidemo.receiver;
  2.  
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7.  
  8. import com.igexin.sdk.PushConsts;
  9. import com.igexin.sdk.PushManager;
  10.  
  11. /**
  12. * Created by Totem on 2016/8/15.
  13. * @author 代码丶如风
  14. */
  15. public class GeTuiPushReceiver extends BroadcastReceiver {
  16.  
  17. public static String KEY_CLIENT_ID = "push_notification_client_id";
  18.  
  19. public static String message;
  20.  
  21. public static void init(Context context){
  22.  
  23. /**
  24. * 初始化对象
  25. * 可以进行推送控制,设置标签,设置别名,设置默认时间等
  26. * 所有接口都由该对象调用
  27. * */
  28. PushManager.getInstance().initialize(context);
  29. /**
  30. * 获取ClientId
  31. * */
  32. String clientId = PushManager.getInstance().getClientid(context);
  33. if(clientId != null){
  34. KEY_CLIENT_ID = clientId;
  35. }
  36. }
  37.  
  38. @Override
  39. public void onReceive(Context context, Intent intent) {
  40. //相关处理
  41. }
  42.  
  43. private static OnGetPushMessageListener onGetPushMessageListener;
  44.  
  45. public static void setOnGetPushMessageListener(OnGetPushMessageListener onGetPushMessageListener) {
  46. GeTuiPushReceiver.onGetPushMessageListener = onGetPushMessageListener;
  47. }
  48.  
  49. /**
  50. * 对外暴露接口
  51. * */
  52.  
  53. public interface OnGetPushMessageListener{
  54. void getOstfMessage(String message);
  55. }
  56.  
  57. }

这个广播是接收推送消息的核心类,其实实现起来也是比较简单的,首先就是获取PushManager对象,然后初始化个推服务,在OnReceiver方法中对传递过来的数据进行判断,这里只对两种状态进行了判断,一种是推送通知,另一种则是透传消息.

  1. @Override
  2. public void onReceive(Context context, Intent intent) {
  3. Bundle bundle = intent.getExtras();
  4. switch (bundle.getInt(PushConsts.CMD_ACTION)){
  5.  
  6. /**
  7. * 推送通知
  8. * */
  9. case PushConsts.GET_CLIENTID:
  10. String cid = bundle.getString("clientid");
  11. break;
  12.  
  13. /**
  14. * 透传消息,传递过来的是Json字符串.一般而言需要客户端进行解析.
  15. * */
  16. case PushConsts.GET_MSG_DATA:
  17. String appid = bundle.getString("appid");
  18. byte[] payload = bundle.getByteArray("payload");
  19. String taskid = bundle.getString("taskid");
  20. String messageid = bundle.getString("messageid");
  21. if(payload != null){
  22. /**
  23. * 如果拿到的数据不为空.那么做相关的处理
  24. * */
  25. message = new String(payload);
  26. onGetPushMessageListener.getOstfMessage(message);
  27. }else{
  28. message = "";
  29. }
  30. break;
  31. }
  32. }

这样通过判断,我们就可以得知,是推送通知,还是透传消息等等.最后写了一个对外界暴露的接口,其实就对Activity暴露接口,当我们在广播中接收到了数据发生了变化,或者是有数据传递过来,需要通过这个接口的方式,告知数据产生了变化,需要主进程做相关的处理,这是暴露接口的目的.然后在主页面中,我们只需要实现这个接口就可以了.

  1. GeTuiPushReceiver.setOnGetPushMessageListener(new GeTuiPushReceiver.OnGetPushMessageListener() {
  2. @Override
  3. public void getOstfMessage(String message) {
  4. if(message!=null){
  5. MessageData.add(message);
  6. }
  7. }
  8. });

iii.打开推送

  turnOnPush(context)方法,用于打开推送,如果我们不主动打开推送的话,就算是后台发送了推送消息,我们也是接收不到的.在默认的状态下是开启状态.

  1. GeTuiPushReceiver.init(getApplicationContext());
  2. pushManager = PushManager.getInstance();
  3. pushManager.turnOnPush(this);

iv.关闭推送服务

  turnOffPush(context)方法,用于关闭推送服务.这个方法执行之后,就无法收到推送服务了,需要注意的是,想要再次接收到推送,必须使用turnOnPush(context)方法.其他方法无效.

  1. GeTuiPushReceiver.init(getApplicationContext());
  2. pushManager = PushManager.getInstance();
  3. pushManager.turnOffPush(this);

v.停止SDK服务.

  stopService(context).停止SDK服务之后,服务不会终止运行,而是终止推送和联网功能.重新启动需要调用initalize()方法或者是turnOnPush()方法.

  1. GeTuiPushReceiver.init(getApplicationContext());
  2. pushManager = PushManager.getInstance();
  3. pushManager.stopService(this);

基本的东西都介绍完了,还有一些设置标签,静默时间,绑定别名什么的,大家如果有兴趣可以自己去研究下,反正我是暂时没有使用到.因此就先不动这几个模块了.我们就来看看如何使用个推后台来实现推送吧.

  首先我们需要创建自己的应用,然后我们可以在应用配置当中获取到我们想要的数据,具体效果如下.

这里有我们想要的数据,AppId,AppKey等等,这些东西都需要在AndroidManifest文件中进行配置.自己做好Demo之后,就可以通过后台发送推送了.

  标题和内容都是必填项,然后一直确定就可以了,这样消息就被推送出去了.在App上打开推送服务,就可以接收到推送了.透传消息我就不进行截图了.需要注意的一点就是透传消息是Json格式的字串.个推为我们提供好了Json的格式化工具.

  最后放上一个源代码,这个源代码是无法运行的,因为这里是使用我自己的后台,大家也需要去创建账号,用自己的后台去创建应用,然后把AndroidManifest文件中的AppId,AppKey,AppSecret进行修改.并且内部提供了很多文档,帮助大家去集成.

http://pan.baidu.com/s/1pLldyqv

Android之使用个推实现三方应用的推送功能的更多相关文章

  1. Android消息推送(二)--基于MQTT协议实现的推送功能

    国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...

  2. android studio git 将项目分享到github,推送到其他平台 码云 等。

    android studio git 将项目分享到github,推送到其他平台 码云 等. 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E- ...

  3. xamarin.android 消息推送功能--极光推送

    最近在使用xamarin.android的消息推送功能,官方使用的例子是FCM方式,按照官方文档,使用FQ软件是可以成功的,但是在国内由于众所周知的原因,在国内服务并不能使用,于是查找国内各自推送平台 ...

  4. 基于EasyDarwin EasyPusher实现Android手机直播推送功能

    EasyPusher直播推送在之前就已经稳定支持了Windows.Linux.ARM上的RTSP直播推送功能,配合EasyDarwin开源流媒体服务器,延时基本在1s以内,这个技术方案经过一年多时间, ...

  5. 使用【百度云推送】第三方SDK实现推送功能具体解释

    之前介绍过怎样使用shareSDK实现新浪微博分享功能,今天介绍怎样使用百度云推送SDK实现Android手机后台推送功能. 执行效果例如以下 第一步,假设使用百度的SDK,当然要先成为百度的开发人员 ...

  6. Android Studio 2.1及其以上版本中的instant run功能 介绍

    Android Studio 2.0及其以后版本中的instant run功能 介绍 转 https://blog.csdn.net/zy987654zy/article/details/514961 ...

  7. ZH奶酪:基于ionic.io平台的ionic消息推送功能实现

    Hybrid App越来越火,Ionic的框架也逐渐被更多的人熟知. 在mobile app中,消息推送是很必要的一个功能. 国内很多ionic应用的推送都是用的极光推送,最近研究了一下Ionic自己 ...

  8. umeng友盟消息推送功能集成

    umeng友盟消息推送功能集成(本人使用的是eclipse开发) 1.首先请自行观看友盟消息推送集成的API文档. 观看地址如下: http://dev.umeng.com/push/android/ ...

  9. React-Native 工程添加推送功能 (iOS 篇)

    推送已经是是手机应用的基本功能,如果自己实现一套推送系统费时费力,所有一般我们会使用第三方的推送服务,这里我使用「极光推送」作为集成推送的例子,因为有现成的 react native 插件 jpush ...

随机推荐

  1. 第三方框架之ThinkAndroid 学习总结(二)

    上文记录了一些ThinkAndroid常用的模块,本文继续介绍ThinkAndroid中的网络化模块. 按照惯例先上Github原文地址:https://github.com/white-cat/Th ...

  2. scrapy 和 scrapy_redis 安装

    安装sqlslte,scrapy需要这个模块 yum install sqlite-devel python3.5 下载包自己编译安装 ./configure make make install 自带 ...

  3. python 根据现有文件树创建文件树

    # -*- coding: utf-8 -*- import os, errno def fileName(path):#获取文件夹 str = '' for i in range(1,len(pat ...

  4. Git命令----放弃本地修改使用服务器上的代码

    git reset --hard FETCH_HEAD FETCH_HEAD表示上一次成功git pull之后形成的commit点.

  5. SharePoint 2010中一些必须知道的限制

    最大文件名长度是123个字符. 一个文档库(library)里最多可以存放10000个文档 一个视图(view)里最多显示5000个条目(item) 推荐的单个内容数据库(content databa ...

  6. 开源消息队列:NetMQ

    NetMQ 是  ZeroMQ的C#移植版本. ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. ...

  7. 【读书笔记】Asp.Net MVC 上传图片到数据库(会的绕行)

    之前上传图片的做法都是上传到服务器上的文件夹中,再将url保存到数据库.其实在MVC中将图片上传到数据库很便捷的事情,而且不用去存url了.而且这种方式支持ie6(ie6不支持jquery自动提交fo ...

  8. 从阿里巴巴IPO联想到创始人和资方关系

    [小九的学堂,致力于以平凡的语言描述不平凡的技术.如要转载,请注明来源:小九的学堂.cnblogs.com/xfuture] 5月7日,阿里巴巴于今日向美国证券交易委员会(SEC)提交了IPO(首次公 ...

  9. Got the Best Employee of the year 2015 Star Award

    Got "The Best Employee of the year 2015 Star Award" from the company, thanks to all that h ...

  10. Spark DAGSheduler生成Stage过程分析实验

    RDD.Action触发SparkContext.run,这里举最简单的例子rdd.count() /** * Return the number of elements in the RDD. */ ...