Android版本介绍
=================
服务说明
------------------------------
开发者通过编写代码调用API接口(或直接通过新浪云提供的页面)推送消息,消息先存到新浪云,再由新浪云的推送服务投递到用户的手机。请参照下图:
.. image:: /images/pushAndroid.png
:height: 175px
使用推送服务,首先需要在新浪云应用的“服务管理”列表中找到“云推送”服务页面,在“推送设置”页面申请AppID。
Android Push Service用AppID来标识应用。申请完AppID后,即可参考 `Android SDK 说明` 在Android App中嵌入新浪云的SDK了。
App开发完成后,可以使用新浪云云推送服务接口推送手机通知。
服务限制
------------------------------
======================= =============
单app可申请的AppID 1
离线消息存储条数 最后5条
离线消息有效期 12小时
最大消息长度 4M
======================= =============
Android SDK 说明
------------------------------
概述
~~~~~
新浪云 Android Push SDK以Jar包的形式提供,方便开发者使用,对外的调用类只有一个PushManager,通过这个类可以打开、关闭、刷新Push的通道。Push通道以TCP长连接的形式存在。
集成SDK
~~~~~~~~~~
从 :ref:`push-android-sdk` 下载新浪云云推送Android的SDK并解压。
在Eclipse中打开需要使用云推送服务的工程,按照如下步骤集成。
在工程根目录下的libs文件夹中,导入SDK里的SinaPush_{version}_SAE_release.jar包和最新的android-support-v{version}.jar 包,若没有libs目录,则选中工程,右键new->folder,命名为libs。
在应用的 AndroidManifest.xml 中添加相关权限
.. code-block:: xml
在应用的AndroidManifest.xml中配置服务
.. code-block:: xml
.. note:: 上文Demo中的1004,应替换为自己应用的AppID,AppID需要从新浪云的服务页面申请。
在调用所有接口前,必须先进行初始化,且初始化只需要调用一次。
.. code-block:: java
PushManager manager = PushManager.getInstance(getApplicationContext());
接收 Push 消息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
**消息分类**
Push消息分为两类,一类是SDK处理的消息,一类是透传给App处理的消息。
1. SDK处理的消息:Android Push SDK 收到消息后,SDK直接处理,不会透传给App。
2. 透传给App的消息:Android Push SDK 收到消息后,直接封装,透传给App处理。如果想将消息透传给App,需要在推送消息时,添加extra字段。如::ref:`Android-api-use` 中push时添加的 `$extra` 参数。
.. note:: 如果想由应用自己来处理、展示 push 消息,那么必须由 Server 端在消息中 extra 字段内添加 json 格式的信息:
handle_by_app: 1 为 app 处理, 0 为 SDK 处理, 默认为 0。
**接收Push消息**
Push 的消息类型
=============================== ============== ===================
类型 说明 消息实体
=============================== ============== ===================
MSG_TYPE_MPS_PUSH_DATA Push 消息 PushDataPacket
MSG_TYPE_ACTION_SWITCH_CHANNEL 通道打开消息 ActionResult
MSG_TYPE_SAE_DATA Aid 消息 String
MSG_CHANNEL_HAS_BEEN_BUILDED 通道打开消息 无
=============================== ============== ===================
.. note:: aid是推送服务的设备标识,推送消息时,会要求提供aid参数:
1. 设备的aid不是永久不变的,设备长时间未连接到服务器,aid标识会被服务器端删除,再次连接时会重新分配aid。
2. 清除App数据也会导致aid改变。
Demo
.. code-block:: java
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
int msg_type = intent.getIntExtra(MPSConsts.CMD_ACTION, -1);
switch(msg_type){
case MPSConsts.MSG_TYPE_MPS_PUSH_DATA:
PushDataPacket packet = intent.getParcelableExtra(MPSConsts.KEY_MSG_MPS_PUSH_DATA);
Toast.makeText(context, "onPush data: " + packet.getSrcJson(),
Toast.LENGTH_LONG).show();
break;
case MPSConsts.MSG_TYPE_UPLOAD_BUSINESS_ERROR:
break;
case MPSConsts.MSG_CHANNEL_HAS_BEEN_BUILDED:
System.out.println("MPSConsts.MSG_CHANNEL_HAS_BEEN_BUILDED!");
Toast.makeText(context, "MSG_CHANNEL_HAS_BEEN_BUILDED", Toast.LENGTH_LONG).show();
break;
case MPSConsts.MSG_TYPE_SAE_DATA:
String aid = intent.getStringExtra(MPSConsts.KEY_MSG_SAE_DATA);
LogUtil.debug("SDKMsgReceiver aid ===========" + aid);
Toast.makeText(context, aid, Toast.LENGTH_LONG).show();
break;
}
}
**跳转到具体页面**
1. 跳转到某个应用的页面:
SDK 收到 push 消息后会发出一个 notification 或是弹出一个 dialog。当用户点击notification 或对话框上的按钮时,会跳转到相应的页面。例如掌中新浪,收到了一个 push下来的新闻消息,展示为 notification,点击后跳转到显示新闻的 activity 中。要想完成上述功能,需要在 push 消息中 acts 字段的参数中包含该应用的包名和 activity 的类名。
动作名/动作 ID:2
参数 1:包名
参数 2:完整类名
"acts": ["2,com.sina.news,com.sina.news.ui.NewContentActivity"],
2. 跳转到浏览器:
SDK 收到消息后如果想跳转到浏览器,需要在 push 消息中 acts 字段的参数中包含 url地址。
动作名/动作 ID:4
参数 1:url 地址
"acts": ["4,http://www.sina.com"],
3. 通过 Scheme 跳转:
通过 Scheme 跳转到某个应用的 activity 中。
动作名/动作 ID:5
参数 1:scheme
"acts": ["5,sinaweibo://sendweibo"],
.. **点击率统计**
.. 如果需要统计 notification 的点击率,需要额外配置,在唤起的 Activity 页面 onCreate 添加如下代码:
.. .. code-block:: java
.. if (getIntent() != null) {
.. manager.sendClickFeedBack (getIntent());
.. }
Android SDK API说明
~~~~~~~~~~~~~~~~~~~~~
.. java:package:: PushManager
.. java:method:: public void initPushChannel(String... params)
:noindex:
打开特定类型的Push通道,准备接收Push消息
.. note::
在通道的准备过程中,调用功能接口可能会失败, 请先处理initPushChannel(string)的执行结果。
:param String appID: 应用程序的唯一序号(由 新浪云 服务面板申请的AppID)
:param String channelID: 通道编号, 由 新浪云 指定, 同 appID
:param String wm: 暂无含义,填入 ‘100’
:param String from: 暂无含义,填入 ‘100’
.. java:method:: public void close()
:noindex:
关闭当前打开的通道,停止接收Push消息, 直到再次调用initPushChannel()。
.. java:method:: public void refreshConnection()
:noindex:
刷新连接,如果连接断开,则立即进行重连。