Your SlideShare is downloading. ×
0
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
百度-雲推送
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

百度-雲推送

2,420

Published on

介绍在大陆地区如果应用要提供推送的服务时,可以直接参考百度云推送的服务。 …

介绍在大陆地区如果应用要提供推送的服务时,可以直接参考百度云推送的服务。
因为Google在当地存在很多问题。
实作上相对容易很多,也有支持iOS。

Published in: Self Improvement
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,420
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
15
Comments
0
Likes
5
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 百度 – 云推送 Pou Mason poumason@live.com http://www.dotblogs.com.tw/pou
  • 2. 大纲 大陆地区 vs.. GCM 百度云推送 运作原理 使用情境 管理控制台 SDK REST API Android iOS
  • 3. GCM (Google Cloud Messaging) 在大陆地区有可能无法正常使用 原因 Android大量被客制化 小米、Samsung 均有自己的管理账号、市集 登入Google Account 有些网段有限制 非必要的登入账号 ….等
  • 4. 云推送 (PUSH) 百度开放云向开发者提供的消息推送服务 三种类型 通知、透传消息、富媒体 推送依据 所有用户、标签分类(指定用户群体) 管理工具 自定义功能(内容、后续行为、样式模板) 用户信息及通知消息的统计信息
  • 5. 服务功能 推送通知 向移动端推送展现在系统通知栏的通知消息 推送消息 以透传的方式将开发者自定义的内容发送到客户端 开发者可以预先在客户端设定好规范,进行消息定制化 推送富媒体 推送图片、视频、音频、网址等形式的富媒体信息 信息统计 管理控制台
  • 6. 重要说明 单条消息 最大 4K 兼容本文和二进制消息格式 如果超过4K 建议可在消息中携带资源的URL地址,在客户端收到消息后,主 动对这个消息发起另一次请求 推送服务 支持消息暂存、转发与推送功能 支持推送指定个人、一群人与所有人(REST API) 一终端多个应用共享一个服务进程与一条TCP长连接
  • 7. 名词解释 名称 说明 API Key 应用标识,终端上的绑定和服务端推送消息时都要用到。 Secret Key 应用私钥,服务端推送消息时用到。 app id 应用ID,就是百度开发者中心的应用基本信息中的应用ID。 客户端绑定调用返回值中可获得。 channel id 推送通道ID,通常指一个终端,如一台android系统手机。 客户端绑定调用返回值中可获得。 user id 应用的用户ID,一个应用在多个端可以都属于同一用户。 user id和channel id配合可以唯一指定一个应用的特定终端。 如果应用不是基于百度账户的账户体系,单独用user就通常指 定了一个应用的特定终端。客户端绑定调用返回值中可获得。
  • 8. SDK运作原理 单服务单通道的端上实现 客户端/服务端/云推送整合机制
  • 9. 单服务单通道的端上实现 – 1/2 云推送 - Android SDK Background service + socket 长连接机制来实现 单服务单通道的机制 应用的初始化、tag等接口调用 通过intent方式发送到后台运行的service service接收到推送消息时 根据消息中指定的发送对象,通过intent,以指定目标应 用包名的方式,发送私有消息给应用 应用无法收到不属于自己/冒充截获的消息
  • 10. 单服务单通道的端上实现 – 2/2 运作原理
  • 11. 客户端/服务端/云推送整合机制 设备与开发者之间的关系 Device 百度 – 云推送Regist(api key, secret key, app id) channel id, use id Provider Save (channel id, use id) (1) (2) (3) Keep data (4)
  • 12. 功能情境说明 单播消息推送 channel id/user id 用户分组的消息推送 Tag 使用自己的账户系统或百度账户
  • 13. 单播消息推送
  • 14. 向应用的特定终端推送消息 一个channel id指定一个终端 通过API,向一个特定channel id推送消息 在推送之前 客户端应用通过绑定接口的返回值获取到channel id 通过网络等手段发送给开发者 开发者需自行维护channel id 例如 Android客户端,在调用了startWork 自定义消息 receiver将会收到返回值 其中包含了channel id、user id等信息
  • 15. 向应用的特定用户推送消息 云推送用user id来表示用户 通过API,向一个特定user id推送消息 和channel id获取方式类似 客户端应用通过绑定接口的返回值获取到user id 开发者需要自行维护user id。
  • 16. 用户分组的消息推送
  • 17. 用户分组的消息推送 – 1/2 向符合特定分类条件的用户集合推送消息 广播是分组推送的特例 对象 应用的所有用户(同时也是所有端)
  • 18. 用户分组的消息推送 – 2/3 云推送通过Tag(标签) 实现用户分组的功能 例如 对于分类信息的应用 一个用户观看了体育栏目,就给该用户打一个Tag sport 6月的某一天NBA总决赛热火夺冠了 向sport这个Tag推送一条及时的夺冠新闻
  • 19. Tag设置方式 客户端设置 常见的作法,透过客户端收集了用户的喜好、习 惯等信息 通常即是用户分组的依据 服务端设置 开发者已具有自定义的用户分组信息 直接于客户端里安插了对应的分组讯息 与广播功能无关
  • 20. 使用自己的账户系统或百度账 户
  • 21. 使用自己的账户系统或百度账户 使用既有的账户体系开发应用 应用就是无账户 选择第三方帐户系统 百度账户
  • 22. 自己的帐户系统或无帐户系统 对于云推送而言 无法理解账户信息 无账户体系 如何识别 channel id + API Key 做为 App + Device的识别值 应用的每个端都是不同的用户 拥有不同的user id
  • 23. 选择第三方账户系统 百度账户系统 云推送和百度账户系统是连通的 使用百度的user id作为唯一标识 不同的端使用同一个用户百度账户登录 user id是一样的 实现对用户的多个端做消息推送 百度账号连接官方文档
  • 24. 管理控制台
  • 25. 管理控制台 云推送统计 应用使用的推送服务的用户统计 通知消息相关统计信息 推送服务 在消息记录栏,可以推送通知、消息、富媒体 推送设置 Android平台的推送服务 输入应用包名 必须与Android客户端应用包名保持一致
  • 26. 推送设置 – 1/2 开放云服务 > 云推送 > 推送设置 设定 应用名称 Android package name iOS 开发/生产凭证、指定目前App的状态为何 脱机消息 不保存、保存指定时间
  • 27. 推送设置 – 2/2
  • 28. 推送消息 – 1/2 至管理中心,点击使用云推送服务的应用 点击左侧边栏中的“云开放服务> 云推送”
  • 29. 推送消息 – 2/2 类型 通知 消息 富媒体
  • 30. 通知 – 1/4
  • 31. 通知 – 2/4
  • 32. 通知 – 3/4 标题 可选的,仅用于Android 不填写,则会使用默认的应用名称 消息内容 最多四十个字的限制 发送范围 发送给所有人、标签发送给一部分人
  • 33. 通知 – 4/4 后续行为 (Android专用) 打开应用 直接打开应用 启动app的launcher activity 自定义动作 按照自定义行为打开应用 打开网页 需要指定网址 设置成经过用户允许才打开网页 默认情况是不经过用户允许直接打开
  • 34. 建立云推送应用 – 1/3 加入百度开发者中心 进入「管理中心」 选择「快速创建应用」 选择「移动客户端」,输入应用名称 取得 App ID API Key Secret Key
  • 35. 建立云推送应用 – 2/3 于所建立的应用中点击「云推送」 依推送设置,建立自己的推送参数 Android 输入App的package name iOS 准备App的开发版/发行版二个凭证档 设定是否保留脱机消息
  • 36. 建立云推送应用 – 3/3
  • 37. Server – SDK说明
  • 38. Server SDK & REST API 服务端SDK C# SDK PHP SDK Java SDK Node.js SDK
  • 39. 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参数中传递
  • 40. 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 攻击算法的正确有效,请保证客户端系统时间正确。
  • 41. 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 重复操作。
  • 42. REST API -签名算法 – 1/2 签名算法元素,如下 请求的http method、url 包括host和sheme,不包括query_string 所有参数(包括GET或POST的参数) 格式化为“key=value”格式,不包含签名字段 以字典序升序排列后,拼接在一起 将http method和url按顺序拼接在这个字符串前面 在拼接好的字符串末尾追加上应用的secret_key, 进行urlencode形成base_string MD5值即为签名的值:
  • 43. 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
  • 44. 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查询设 备类型。 基本方法
  • 45. 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} 删除离线消息。
  • 46. 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相关方法
  • 47. 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查询用户所属的标签列 表。
  • 48. Client – SDK说明
  • 49. 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
  • 50. Baidu Push SDK架构 负责处理复杂的Push HTTP/HTTPS API 提供应用与Push 服务器 直接沟通
  • 51. 步骤1 – 加入SDK 建立一个新的Android Project pushservice-VERSION.jar 加入libs中 libbdpush_V1_0.so 加入libs/armeabi  jar 包添加到工程的 Java Build Path
  • 52. 步骤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" />
  • 53. 步骤3 – 注册Receiver – 1/4 新增加一个PushMessageReceiver "your.package.PushMessageReceiver" 实作的范例程序 可直接复制范例程序中的PushMessageReceiver 的代码
  • 54. 步骤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>
  • 55. 步骤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>
  • 56. 步骤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>
  • 57. 備註 更多相關Android結合Push SDK 可參考SDK.zip中的用户手册.pdf iOS相關開發資訊 參考http://bs.baidu.com/push-sdk-release/Baidu- Push-SDK-iOS-L1-1.1.0.zip
  • 58. Q & A Thanks for your listening

×