什么叫推送?

中文名称:推送

英文名称:push

定义:描述因特网内容提供者和因特网用户之间工作方式的术语。“推送”指因特网内容提供者定期向预订用户“提供”数据。

项目中有可能会用到推送。如果自己写一个的话,可是个耗时耗力的时,好在很多第三方公司都提供了推送服务,比如百度云。我们可以在自己的程序中使用它。

百度云推送

云推送(Push)是百度开放云向开发者提供的消息推送服务;通过利用云端与客户端之间建立稳定、可靠的长连接来为开发者提供向客户端应用推送实时消息服务。

百度云推送服务支持推送三种类型的消息:通知、透传消息及富媒体;支持向所有用户或根据标签分类向特定用户群体推送消息;支持更多自定义功能(如自定义内容、后续行为、样式模板等);提供用户信息及通知消息统计信息,方便开发者进行后续开发及运营。

百度hi官方技术讨论群:1405944 QQ群:242190646

云推送服务具有以下特点:

1. 增强用户粘性

通过云和端之间建立的长连接,可以实时的推送消息到达用户端。保持与用户的沟通,大大提升用户活跃度和留存率。

2. 节约成本

在省电省流量方面远超行业水平,基础的消息推送服务永久免费,大大节省开发者推送的成本。

3. 稳定安全的推送

强大的分布式集群长期为百度各大产品线提供推送服务,保证消息推送服务的稳定、可靠。

-------------------------------------------------------------

好吧,让我们看看如何来使用它。

百度云推送分两部分:web端和手机端。

我们先看下手机端如何做。

1.注册百度账户

2.加入 百度开发者

3.创建应用

4.下载sdk

5.导入sdk包,开发应用

5.1 在AndroidManifest.xml 中注册响应的receiver

5.2 在主窗体的oncreate中写

PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY, PushServiceUtils.getMetaValue(this, "api_key"));

5.3 编写自己的receiver。处理 绑定的相关消息,推送的消息,通知栏点击后的消息

public class MyPushMessageReceiver extends BroadcastReceiver {private static final String TAG = "BroadcastReceiver";@Overridepublic void onReceive(final Context context, Intent intent) {Log.d(TAG, ">>> Receive intent: \r\n" + intent);if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {// 获取消息内容String message = intent.getExtras().getString(PushConstants.EXTRA_PUSH_MESSAGE_STRING);// 消息的用户自定义内容读取方式Log.i(TAG, "onMessage: " + message);// 自定义内容的json串
            Log.d(TAG,"EXTRA_EXTRA = "+ intent.getStringExtra(PushConstants.EXTRA_EXTRA));// 用户在此自定义处理消息,以下代码为demo界面展示用Intent responseIntent = null;responseIntent = new Intent(PushServiceUtils.ACTION_MESSAGE);responseIntent.putExtra(PushServiceUtils.EXTRA_MESSAGE, message);responseIntent.setClass(context, MainActivity.class);responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(responseIntent);} else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {// 处理绑定等方法的返回数据// PushManager.startWork()的返回值通过PushConstants.METHOD_BIND得到// 获取方法final String method = intent.getStringExtra(PushConstants.EXTRA_METHOD);// 方法返回错误码。若绑定返回错误(非0),则应用将不能正常接收消息。// 绑定失败的原因有多种,如网络原因,或access token过期。// 请不要在出错时进行简单的startWork调用,这有可能导致死循环。// 可以通过限制重试次数,或者在其他时机重新调用来解决。int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,PushConstants.ERROR_SUCCESS);String content = "";if (intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT) != null) {// 返回内容content = new String(intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));}// 用户在此自定义处理消息,以下代码为demo界面展示用Log.d(TAG, "onMessage: method : " + method);Log.d(TAG, "onMessage: result : " + errorCode);Log.d(TAG, "onMessage: content : " + content);Toast.makeText(context,"method : " + method + "\n result: " + errorCode+ "\n content = " + content, Toast.LENGTH_SHORT).show();Intent responseIntent = null;responseIntent = new Intent(PushServiceUtils.ACTION_RESPONSE);responseIntent.putExtra(PushServiceUtils.RESPONSE_METHOD, method);responseIntent.putExtra(PushServiceUtils.RESPONSE_ERRCODE,errorCode);responseIntent.putExtra(PushServiceUtils.RESPONSE_CONTENT, content);responseIntent.setClass(context, MainActivity.class);responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(responseIntent);// 可选。通知用户点击事件处理} else if (intent.getAction().equals(PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {Log.d(TAG, "intent=" + intent.toUri(0));// 自定义内容的json串String customData = intent.getStringExtra(PushConstants.EXTRA_EXTRA);Log.d(TAG,"EXTRA_EXTRA = "+ intent.getStringExtra(PushConstants.EXTRA_EXTRA));if (customData == null || "".equals(customData)) {return;}Intent aIntent = new Intent();aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);aIntent.setClass(context,com.pdwy.wulianwang.mobile.main.notification.NotificationDetails_Activity.class);String title = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_TITLE, title);String content = intent.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT, content);String detailContent = "";try {org.json.JSONObject json = new JSONObject(customData);detailContent = json.getString("detailContent");} catch (JSONException e) {// TODO Auto-generated catch block
                e.printStackTrace();}// 保存在数据库NotifyDao dao = new NotifyDao();int notifyId = dao.saveNotify(title, content, detailContent);// 向消息详细页发送内容aIntent.putExtra("notify_id", notifyId);context.startActivity(aIntent);}}
}

web端需要做什么

1.建立项目

2.下载skd,引入包 bccs-api-lib-1.0.jar

3.编写代码。

/** @brief 推送单播通知(Android Push SDK拦截并解析) message_type = 1 (默认为0)*/// 1. 设置developer平台的ApiKey/SecretKeyString apiKey = "xxxxxxxxxxxxxxxxxx";String secretKey = "xxxxxxxxxxxxx";ChannelKeyPair pair = new ChannelKeyPair(apiKey, secretKey);// 2. 创建BaiduChannelClient对象实例BaiduChannelClient channelClient = new BaiduChannelClient(pair);// 3. 若要了解交互细节,请注册YunLogHandler类channelClient.setChannelLogHandler(new YunLogHandler() {@Overridepublic void onHandle(YunLogEvent event) {System.out.println(event.getMessage());}});try {// 4. 创建请求类对象PushBroadcastMessageRequest request = new PushBroadcastMessageRequest();request.setDeviceType(3); // device_type => 1: web 2: pc 3:android// 4:ios 5:wp// request.setMessage("Hello Channel");// 若要通知,request.setMessageType(1);request.setMessage("{\"title\":\"Notify_title_danbo\",\"description\":\"Notify_description_content\"}");
            //request.setMessage(notify.toString());// 5. 调用pushMessage接口PushBroadcastMessageResponse response = channelClient.pushBroadcastMessage(request);// 6. 认证推送成功System.out.println("push amount : " + response.getSuccessAmount());} catch (ChannelClientException e) {// 处理客户端错误异常
            e.printStackTrace();} catch (ChannelServerException e) {// 处理服务端错误异常
            System.out.println(String.format("request_id: %d, error_code: %d, error_message: %s",e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));}

上面的代码就能发送一条通知到手机。支持自定义消息标题,描述,其他自定义内容。

--------------

选用百度是个比较简单实现的方式。截止2013-9-12,我没有找到相关的收费信息。本着学习的精神可以研究研究,不过应该也可以再实际项目中使用。

android开发(25) - 推送的实现,使用百度云推送相关推荐

  1. 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送

    写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...

  2. JPush极光推送 and 百度云推送

    一.极光推送 这两天在研究极光推送,极光推送是一种第三方推送,提供了比较便利的推送的方式,首先让开发者不用花人力和时间去开发后台数据返回,客户端这边只管一些配置和客户端接受消息的配置. 激光推送文档: ...

  3. Android百度云推送接入,附完整代码

    1.创建应用获取api_key 百度云推送:http://push.baidu.com/ SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_and ...

  4. Android 高仿微信实时聊天 基于百度云推送

    一直在仿微信界面,今天终于有幸利用百度云推送仿一仿微信聊天了~~~ 首先特别感谢:weidi1989分享的Android之基于百度云推送IM ,大家可以直接下载:省了很多事哈,本例中也使用了weidi ...

  5. Android推送 百度云推送 入门篇

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27231237 现在app基本都有推送的功能,于是看了下百度云的推送,官方文档和D ...

  6. 消息推送之百度云推送Android集成与使用方法

    这两天由于项目需要,研究了一下百度云推送,本来这事没什么多大工作量的,但注册百度开发者账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路.好在我耗费了N多个毫毫秒秒后稀 ...

  7. ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)

    1.首先检测支付账户是否开通快捷支付服务,如果开通后,那么公钥是否上传(支付宝问题一定要找支付宝客服解决,找其他人没有用,支付宝客服可以帮你分析底层原因) 2.修改app配置文件:alipay_cal ...

  8. 基于android百度云推送务设计,Android之基于百度云推送IM

    偶然的一天,发现百度出了一个云推送包,想想百度的服务器还是比较靠谱的说,怎么着也比我们自己搭建的服务器要稳定,于是乎,我就花了几天时间,写了一个小小的聊天工具,权当是练手.主要思路是:客户端的聊天内容 ...

  9. 集成百度云推送,Android8.0系统推送收不到问题解决方案

    因为之前没有集成过百度云推送,接手新项目之后项目需求是接入百度云推送,没办法因为项目是海外项目所以只能硬着头皮来接入了,话不多说开始你的表演: 首先就是去百度云推送的官网去创建应用并启用: .在配置详 ...

最新文章

  1. A free SSH client - putty[]
  2. Java基础课程---权限修饰符
  3. 在线小词典(mysql扩展库操作)
  4. Java错别字检查_java中关于异常的处理
  5. leetcode1094. 拼车
  6. 【算法系列之十三】二叉树两叶节点的最大距离
  7. JdbcTemplate(操作数据库-查询返回值)
  8. python执行shell命令行_python执行命令行:python中执行shell命令行read结果
  9. canvas 绘制贪吃蛇游戏
  10. greenplum数据导入到mysql,将数据从DB2数据库传输到greenplum数据库
  11. python用什么来写模块-用Python编写模块有何技巧?
  12. Sina微博模拟登录获取Cookies
  13. 了解Mysql与MariaDb的关系
  14. DVWA中学习PHP常见漏洞及修复方法
  15. php有空语句吗?,php是空还是空?
  16. 路由器的三种配置方式
  17. WebStrom配置好git后文件颜色代表的含义
  18. 记住熊三木,一场关于文创产业“复兴十年” 的豪赌
  19. 计算机键盘打字基础知识,计算机基础知识:计算机键盘的使用
  20. [禅悟人生]让心灵回归简朴

热门文章

  1. 20X23 FCPX插件10组创意图像拼接排版LOGO标志展示片头 Abstract Photo Openers
  2. HDU1248完全背包
  3. nodejs本地启动websocket服务,前端调用本地websocket接口调试
  4. 大专的我是如何学Java的,这里列出了必学知识点,以及内部资料免费领取
  5. linux网络内核分析与开发 pdf,Linux网络内核分析与开发-肖宇峰.pdf
  6. G1 垃圾收集器入门
  7. snprintf 与 vsnprintf
  8. 计算机科学专业则有27所院校,最新版亚洲大学排名
  9. 嘘!偷偷看下阿里技术大牛的私人书单
  10. Linux动态库的动态加载与静态加载以及加载依赖了其他动态库的动态库