SlideShare une entreprise Scribd logo
1  sur  58
百度 – 云推送
Pou Mason
poumason@live.com
http://www.dotblogs.com.tw/pou
大纲
大陆地区 vs.. GCM
百度云推送
运作原理
使用情境
管理控制台
SDK
REST API
Android
iOS
GCM (Google Cloud Messaging)
在大陆地区有可能无法正常使用
原因
Android大量被客制化
小米、Samsung
均有自己的管理账号、市集
登入Google Account
有些网段有限制
非必要的登入账号
….等
云推送 (PUSH)
百度开放云向开发者提供的消息推送服务
三种类型
通知、透传消息、富媒体
推送依据
所有用户、标签分类(指定用户群体)
管理工具
自定义功能(内容、后续行为、样式模板)
用户信息及通知消息的统计信息
服务功能
推送通知
向移动端推送展现在系统通知栏的通知消息
推送消息
以透传的方式将开发者自定义的内容发送到客户端
开发者可以预先在客户端设定好规范,进行消息定制化
推送富媒体
推送图片、视频、音频、网址等形式的富媒体信息
信息统计
管理控制台
重要说明
单条消息
最大 4K
兼容本文和二进制消息格式
如果超过4K
建议可在消息中携带资源的URL地址,在客户端收到消息后,主
动对这个消息发起另一次请求
推送服务
支持消息暂存、转发与推送功能
支持推送指定个人、一群人与所有人(REST API)
一终端多个应用共享一个服务进程与一条TCP长连接
名词解释
名称 说明
API Key 应用标识,终端上的绑定和服务端推送消息时都要用到。
Secret Key 应用私钥,服务端推送消息时用到。
app id 应用ID,就是百度开发者中心的应用基本信息中的应用ID。
客户端绑定调用返回值中可获得。
channel id 推送通道ID,通常指一个终端,如一台android系统手机。
客户端绑定调用返回值中可获得。
user id 应用的用户ID,一个应用在多个端可以都属于同一用户。
user id和channel id配合可以唯一指定一个应用的特定终端。
如果应用不是基于百度账户的账户体系,单独用user就通常指
定了一个应用的特定终端。客户端绑定调用返回值中可获得。
SDK运作原理
单服务单通道的端上实现
客户端/服务端/云推送整合机制
单服务单通道的端上实现 – 1/2
云推送 - Android SDK
Background service + socket
长连接机制来实现
单服务单通道的机制
应用的初始化、tag等接口调用
通过intent方式发送到后台运行的service
service接收到推送消息时
根据消息中指定的发送对象,通过intent,以指定目标应
用包名的方式,发送私有消息给应用
应用无法收到不属于自己/冒充截获的消息
单服务单通道的端上实现 – 2/2
运作原理
客户端/服务端/云推送整合机制
设备与开发者之间的关系
Device
百度 – 云推送Regist(api key,
secret key,
app id)
channel id,
use id
Provider
Save (channel id, use id)
(1)
(2)
(3)
Keep data
(4)
功能情境说明
单播消息推送
channel id/user id
用户分组的消息推送
Tag
使用自己的账户系统或百度账户
单播消息推送
向应用的特定终端推送消息
一个channel id指定一个终端
通过API,向一个特定channel id推送消息
在推送之前
客户端应用通过绑定接口的返回值获取到channel id
通过网络等手段发送给开发者
开发者需自行维护channel id
例如
Android客户端,在调用了startWork
自定义消息 receiver将会收到返回值
其中包含了channel id、user id等信息
向应用的特定用户推送消息
云推送用user id来表示用户
通过API,向一个特定user id推送消息
和channel id获取方式类似
客户端应用通过绑定接口的返回值获取到user id
开发者需要自行维护user id。
用户分组的消息推送
用户分组的消息推送 – 1/2
向符合特定分类条件的用户集合推送消息
广播是分组推送的特例
对象
应用的所有用户(同时也是所有端)
用户分组的消息推送 – 2/3
云推送通过Tag(标签)
实现用户分组的功能
例如
对于分类信息的应用
一个用户观看了体育栏目,就给该用户打一个Tag
sport
6月的某一天NBA总决赛热火夺冠了
向sport这个Tag推送一条及时的夺冠新闻
Tag设置方式
客户端设置
常见的作法,透过客户端收集了用户的喜好、习
惯等信息
通常即是用户分组的依据
服务端设置
开发者已具有自定义的用户分组信息
直接于客户端里安插了对应的分组讯息
与广播功能无关
使用自己的账户系统或百度账
户
使用自己的账户系统或百度账户
使用既有的账户体系开发应用
应用就是无账户
选择第三方帐户系统
百度账户
自己的帐户系统或无帐户系统
对于云推送而言
无法理解账户信息
无账户体系
如何识别
channel id + API Key
做为 App + Device的识别值
应用的每个端都是不同的用户
拥有不同的user id
选择第三方账户系统
百度账户系统
云推送和百度账户系统是连通的
使用百度的user id作为唯一标识
不同的端使用同一个用户百度账户登录
user id是一样的
实现对用户的多个端做消息推送
百度账号连接官方文档
管理控制台
管理控制台
云推送统计
应用使用的推送服务的用户统计
通知消息相关统计信息
推送服务
在消息记录栏,可以推送通知、消息、富媒体
推送设置
Android平台的推送服务
输入应用包名
必须与Android客户端应用包名保持一致
推送设置 – 1/2
开放云服务 > 云推送 > 推送设置
设定
应用名称
Android
package name
iOS
开发/生产凭证、指定目前App的状态为何
脱机消息
不保存、保存指定时间
推送设置 – 2/2
推送消息 – 1/2
至管理中心,点击使用云推送服务的应用
点击左侧边栏中的“云开放服务> 云推送”
推送消息 – 2/2
类型
通知
消息
富媒体
通知 – 1/4
通知 – 2/4
通知 – 3/4
标题
可选的,仅用于Android
不填写,则会使用默认的应用名称
消息内容
最多四十个字的限制
发送范围
发送给所有人、标签发送给一部分人
通知 – 4/4
后续行为 (Android专用)
打开应用
直接打开应用
启动app的launcher activity
自定义动作
按照自定义行为打开应用
打开网页
需要指定网址
设置成经过用户允许才打开网页
默认情况是不经过用户允许直接打开
建立云推送应用 – 1/3
加入百度开发者中心
进入「管理中心」
选择「快速创建应用」
选择「移动客户端」,输入应用名称
取得
App ID
API Key
Secret Key
建立云推送应用 – 2/3
于所建立的应用中点击「云推送」
依推送设置,建立自己的推送参数
Android
输入App的package name
iOS
准备App的开发版/发行版二个凭证档
设定是否保留脱机消息
建立云推送应用 – 3/3
Server – SDK说明
Server SDK & REST API
服务端SDK
C# SDK
PHP SDK
Java SDK
Node.js SDK
REST API
 http[s]://channel.api.duapp.com/rest/2.0/channel/{r
esource}?{query_string}
 {resource}
 操作的资源名,可能为channel固定值或channel_id
 {query_string}
 通用参数部分和具体API调用参数部分组成
 key/value对都必须经过urlencode处理,必须是UTF-8编码
 GET Request
 必须放在QUERY参数中传递,即放在“?”后面
 POST Request
 放在POST参数中传递
REST API - 通用参数
参数名称 类型 是否必需 描述
method string 是 API的资源操作方法名
apikey string 是 API的资源操作方法名,访问令牌,明文AK,
可从此值获得App的信息,配合sign中的sk做
合法性身份认证
timestamp uint 是 用户发起请求时的unix时间戳。本次请求签名
的有效时间为该时间戳+10分钟。
sign string 是 调用参数签名值,与apikey成对出现。
expires uint 否 用户指定本次请求签名的失效时间。格式为
unix时间戳形式。
v uint 否 API版本号,默认使用最高版本。
调用时timestamp必须设置,而expires可选设置,用于防止 replay 型攻击。
为保证防止 replay 攻击算法的正确有效,请保证客户端系统时间正确。
REST API - 错误码定义
HTTP状态码 Error_code Error_msg 备注
500 30600 Internal Server Error 服务器内部错误。
405 30601 Method Not Allowed 不允许的操作(指定了
错误的HTTP方法或
API)。
400 30602 Request Params Not Valid 请求参数非法。
403 30603 Authentication Failed 权限校验错误 。
402 30604 Quota Use Up Payment
Required
无quota
404 30605 Data Required Not Found 请求数据不存在。
408 30606 Request Time Expires Timeout 请求已超时。
408 30607 Channel Token Timeout channel_token已经过期。
404 30608 Bind Relation Not Found 绑定关系不存在。
404 30609 Bind Number Too Many 绑定数过多。
409 30610 Duplicate Operation 重复操作。
REST API -签名算法 – 1/2
签名算法元素,如下
请求的http method、url
包括host和sheme,不包括query_string
所有参数(包括GET或POST的参数)
格式化为“key=value”格式,不包含签名字段
以字典序升序排列后,拼接在一起
将http method和url按顺序拼接在这个字符串前面
在拼接好的字符串末尾追加上应用的secret_key,
进行urlencode形成base_string
MD5值即为签名的值:
REST API -签名算法 – 2/2
MD5
举例
发送Token
sign=MD5(urlencode($http_method$url$k1=$v1$k2=$v2$k3=$v3$secret_key));
$secret_key:通过“开发者中心 -> 管理中心 -> 点击某应用 -> 应用信息详情页” 获得。
url [POST]:
http://{domain}/rest/2.0/channel/channel?method=token&timestamp=1313293563&
expires=1313293565&v=1
POSThttp://{domain}/rest/2.0/channel/channelapikey=Ljc710pzAa99GULCo8y48NvB
expires=1313293565method=tokentimestamp=1313293563v=18777F555E8C16715EBA
5C85341684C58
REST API – 方法清单 – 1/4
方法 URL 描述
query_bindlist http[s]://channel.api.duapp.com/re
st/2.0/channel/{channel_id}
查询设备、应用、用
户与百度Channel的绑
定关系。
verify_bind https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
判断设备、应用、用
户与Channel的绑定关
系是否存在。
push_msg http[s]://channel.api.duapp.com/re
st/2.0/channel/channel
推送消息,该接口可
用于推送单个人、一
群人、所有人以及固
定设备的使用场景。
query_device_type https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
根据channel_id查询设
备类型。
基本方法
REST API – 方法清单 – 2/4
脱机消息
方法 URL 描述
fetch_msg https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
查询离线消息。
fetch_msgcount https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
查询离线消息的个数。
delete_msg https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
删除离线消息。
REST API – 方法清单 – 3/4
方法 URL 描述
init_app_ioscert https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
上传iOS apns证书,使
channel系统支持apns
服务。
update_app_ioscert https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
更新iOS设备的推送证
书相关内容。
delete_app_ioscert https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
删除iOS设备的推送证
书,使得App server不
再支持apns服务。
query_app_ioscert https://channel.api.duapp.com/rest
/2.0/channel/{channel_id}
查询该App server对应
的iOS证书。
iOS相关方法
REST API – 方法清单 – 4/4
标签
方法 URL 描述
set_tag https://channel.api.duapp.com
/rest/2.0/channel/channel
服务器端设置用户标签。当该标签
不存在时,服务端将会创建该标签。
特别地,当user_id被提交时,服务
端将会完成用户和tag的绑定操作。
fetch_tag https://channel.api.duapp.com
/rest/2.0/channel/channel
App Server查询应用标签。
delete_tag https://channel.api.duapp.com
/rest/2.0/channel/channel
服务端删除用户标签。特别地,当
user_id被提交时,服务端将只会完
成解除该用户与tag绑定关系的操
作。
该操作不可恢复,请谨慎使用。
query_user_tags https://channel.api.duapp.com
/rest/2.0/channel/channel
App Server查询用户所属的标签列
表。
Client – SDK说明
SDK与范例
在设置推送后,系统会自动产生二个档案
Android示例zip
透过里面的SDK(pushservice.jar)整合进既有的App
http://bcs.duapp.com/cplat-01/push%2FBaidu-Push-SDK-
Android-L2-2.4.0.zip
Android示例apk
Baidu Push SDK架构
负责处理复杂的Push HTTP/HTTPS API
提供应用与Push 服务器
直接沟通
步骤1 – 加入SDK
建立一个新的Android Project
pushservice-VERSION.jar
加入libs中
libbdpush_V1_0.so
加入libs/armeabi
 jar 包添加到工程的 Java Build Path
步骤2 – 宣告Permission
AndroidManifest.xml 宣告必要的
Permissions
<!-- Push service 运行需要的权限 --/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
步骤3 – 注册Receiver – 1/4
新增加一个PushMessageReceiver
"your.package.PushMessageReceiver"
实作的范例程序
可直接复制范例程序中的PushMessageReceiver
的代码
步骤3 – 注册Receiver – 2/4
AndroidManifest.xml中<application />
<!-- push service client -->
<receiver android:name="your.package.PushMessageReceiver">
<intent-filter>
<!-- 接收 push 消息 -->
<action android:name="com.baidu.android.pushservice.action.MESSAGE" />
<!-- 接收 bind、setTags 等 method 的返回结果 -->
<action android:name="com.baidu.android.pushservice.action.RECEIVE" />
<!-- 可选。接受通知点击事件,和通知自定义内容 -->
<action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
</intent-filter>
</receiver>
步骤3 – 注册Receiver – 3/4
AndroidManifest.xml中<application />
<!-- push service start -->
<!-- 用于接收系统消息以保证 PushService 正常运行 -->
<receiver android:name="com.baidu.android.pushservice.PushServiceReceiver"
android:process=":bdservice_v1">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<action android:name="com.baidu.android.pushservice.action.notification.SHOW" />
<action android:name="com.baidu.android.pushservice.action.media.CLICK" />
</intent-filter>
</receiver>
步骤3 – 注册Receiver – 4/4
AndroidManifest.xml中<application />
<!-- Push 服务接收客户端发送的各种请求-->
<!-- 注意:RegistrationReceiver 在 2.1.1 及之前版本有拼写失误,为
RegistratonReceiver ,用新
版本 SDK 时请更改为如下代码-->
<receiver android:name="com.baidu.android.pushservice.RegistrationReceiver"
android:process=":bdservice_v1">
<intent-filter>
<action android:name="com.baidu.android.pushservice.action.METHOD " />
<action android:name="com.baidu.android.pushservice.action.BIND_SYNC " />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
備註
更多相關Android結合Push SDK
可參考SDK.zip中的用户手册.pdf
iOS相關開發資訊
參考http://bs.baidu.com/push-sdk-release/Baidu-
Push-SDK-iOS-L1-1.1.0.zip
Q & A
Thanks for your listening

Contenu connexe

Similaire à 百度-雲推送

Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
drewz lin
 
zend framework in web services
zend framework in web serviceszend framework in web services
zend framework in web services
王 承石
 
Google cloud message by sean
Google cloud message by seanGoogle cloud message by sean
Google cloud message by sean
Sean Lee
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
Frank Xu
 
Using google appengine_final2
Using google appengine_final2Using google appengine_final2
Using google appengine_final2
Wei Sun
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Rails
shaokun
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
Wei Sun
 
Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報
PN Wu (小平)
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
evercislide
 

Similaire à 百度-雲推送 (20)

Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
Top100summit 腾讯-周健-服务化与体系化解决大量定制小项目开发困境
 
Api survey #5 - firebase cloud messaging
Api survey #5  - firebase cloud messagingApi survey #5  - firebase cloud messaging
Api survey #5 - firebase cloud messaging
 
Cas Sso Intro
Cas Sso IntroCas Sso Intro
Cas Sso Intro
 
zend framework in web services
zend framework in web serviceszend framework in web services
zend framework in web services
 
Google cloud message by sean
Google cloud message by seanGoogle cloud message by sean
Google cloud message by sean
 
使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统使用NodeJS构建静态资源管理系统
使用NodeJS构建静态资源管理系统
 
Open Api&Sip
Open Api&SipOpen Api&Sip
Open Api&Sip
 
Using google appengine_final2
Using google appengine_final2Using google appengine_final2
Using google appengine_final2
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
Rest Ruby On Rails
Rest Ruby On RailsRest Ruby On Rails
Rest Ruby On Rails
 
Mocha Bsm
Mocha BsmMocha Bsm
Mocha Bsm
 
Using google appengine (2)
Using google appengine (2)Using google appengine (2)
Using google appengine (2)
 
在雲端上啜飲爪哇
在雲端上啜飲爪哇在雲端上啜飲爪哇
在雲端上啜飲爪哇
 
Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報Ncut csie 102學年度專題成果簡報
Ncut csie 102學年度專題成果簡報
 
Lean Message Architecture Highlights
Lean Message Architecture HighlightsLean Message Architecture Highlights
Lean Message Architecture Highlights
 
LeanMessage 实时通信云架构
LeanMessage 实时通信云架构LeanMessage 实时通信云架构
LeanMessage 实时通信云架构
 
網站設計100步
網站設計100步網站設計100步
網站設計100步
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析
 
利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek利用Signalr打造即時通訊@Tech day geek
利用Signalr打造即時通訊@Tech day geek
 

百度-雲推送