android开发(25) - 推送的实现,使用百度云推送
什么叫推送?
中文名称:推送
英文名称: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) - 推送的实现,使用百度云推送相关推荐
- 开发笔记-Android消息推送骚操作:亚马逊-SNS对接FCM和百度云推送
写在前面: 之前使用阿里云的服务器用阿里消息推送好好的,然后因为国外业务需要使用亚马逊服务器,阿里云推送也不能用,用亚马逊的 SNS (短信消息推送服务),SNS 可以对接多家推送平台,其中 Andr ...
- JPush极光推送 and 百度云推送
一.极光推送 这两天在研究极光推送,极光推送是一种第三方推送,提供了比较便利的推送的方式,首先让开发者不用花人力和时间去开发后台数据返回,客户端这边只管一些配置和客户端接受消息的配置. 激光推送文档: ...
- Android百度云推送接入,附完整代码
1.创建应用获取api_key 百度云推送:http://push.baidu.com/ SDK下载:http://push.baidu.com/sdk/push_client_sdk_for_and ...
- Android 高仿微信实时聊天 基于百度云推送
一直在仿微信界面,今天终于有幸利用百度云推送仿一仿微信聊天了~~~ 首先特别感谢:weidi1989分享的Android之基于百度云推送IM ,大家可以直接下载:省了很多事哈,本例中也使用了weidi ...
- Android推送 百度云推送 入门篇
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/27231237 现在app基本都有推送的功能,于是看了下百度云的推送,官方文档和D ...
- 消息推送之百度云推送Android集成与使用方法
这两天由于项目需要,研究了一下百度云推送,本来这事没什么多大工作量的,但注册百度开发者账户创建应用令我蛋疼菊紧了好一阵,这些东西做了对技术没啥提升,不做又不行,必经之路.好在我耗费了N多个毫毫秒秒后稀 ...
- ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)
1.首先检测支付账户是否开通快捷支付服务,如果开通后,那么公钥是否上传(支付宝问题一定要找支付宝客服解决,找其他人没有用,支付宝客服可以帮你分析底层原因) 2.修改app配置文件:alipay_cal ...
- 基于android百度云推送务设计,Android之基于百度云推送IM
偶然的一天,发现百度出了一个云推送包,想想百度的服务器还是比较靠谱的说,怎么着也比我们自己搭建的服务器要稳定,于是乎,我就花了几天时间,写了一个小小的聊天工具,权当是练手.主要思路是:客户端的聊天内容 ...
- 集成百度云推送,Android8.0系统推送收不到问题解决方案
因为之前没有集成过百度云推送,接手新项目之后项目需求是接入百度云推送,没办法因为项目是海外项目所以只能硬着头皮来接入了,话不多说开始你的表演: 首先就是去百度云推送的官网去创建应用并启用: .在配置详 ...
最新文章
- A free SSH client - putty[]
- Java基础课程---权限修饰符
- 在线小词典(mysql扩展库操作)
- Java错别字检查_java中关于异常的处理
- leetcode1094. 拼车
- 【算法系列之十三】二叉树两叶节点的最大距离
- JdbcTemplate(操作数据库-查询返回值)
- python执行shell命令行_python执行命令行:python中执行shell命令行read结果
- canvas 绘制贪吃蛇游戏
- greenplum数据导入到mysql,将数据从DB2数据库传输到greenplum数据库
- python用什么来写模块-用Python编写模块有何技巧?
- Sina微博模拟登录获取Cookies
- 了解Mysql与MariaDb的关系
- DVWA中学习PHP常见漏洞及修复方法
- php有空语句吗?,php是空还是空?
- 路由器的三种配置方式
- WebStrom配置好git后文件颜色代表的含义
- 记住熊三木,一场关于文创产业“复兴十年” 的豪赌
- 计算机键盘打字基础知识,计算机基础知识:计算机键盘的使用
- [禅悟人生]让心灵回归简朴
热门文章
- 20X23 FCPX插件10组创意图像拼接排版LOGO标志展示片头 Abstract Photo Openers
- HDU1248完全背包
- nodejs本地启动websocket服务,前端调用本地websocket接口调试
- 大专的我是如何学Java的,这里列出了必学知识点,以及内部资料免费领取
- linux网络内核分析与开发 pdf,Linux网络内核分析与开发-肖宇峰.pdf
- G1 垃圾收集器入门
- snprintf 与 vsnprintf
- 计算机科学专业则有27所院校,最新版亚洲大学排名
- 嘘!偷偷看下阿里技术大牛的私人书单
- Linux动态库的动态加载与静态加载以及加载依赖了其他动态库的动态库