replicaword使用问题及解答步骤解答一下

Android应用开发 推送原理解析 极光推送使用详解 (零基础精通推送)
作者 : octopus_truth转载请注明出处 :&http://blog.csdn.net/shulianghan/article/details/推送技术产生场景 :&-- 服务器端主动性 : 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态;-- 数据实时性 : 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据;-- 基本原理 : 使客户端实时获取服务器端消息, Pull 方式, 小周期轮询, 费电费流量; 另一个就是 Push 方式, 服务器端向客户端主动推送数据, 可以省电省流量;示例代码下载 :&http://download.csdn.net/detail/han6005&一. 推送原理1. Android 推送原理简介(1) SMS 方式推送SMS 推送 :&-- SMS :&Short Message Service 缩写, 即短信服务;-- 实现方式 : 服务器端向手机端发送短信, 手机监听短信广播, 然后将拦截的短信信息进行显示;-- 优点 : 省电, 省流量, 在没有网络的偏远地点也能接收到推送消息;-- 缺点 : 费钱, 一毛钱一条;(2) 轮询 方式推送轮询推送 :&-- 实现方式 : 周期性主动获取网络中的数据;-- 缺点 : 费电, 费流量;(3) 长链接 方式推送长链接推送 : 主流方法;-- 实现方式 : 手机端与服务器端建立一条长时间的数据流链接, 手机客户端一直等待服务器端的数据;-- 优点 : 有一条长链接, 有数据的时候才发送数据, 没有时不消耗流量, 比较省流量;-- 缺点 : 由于要保存一条长链接, 比较费电; 在网络不稳定的情况下, 推送容易失败;2. Android 推送解决方案简介(1) C2DM 推送 (Google)C2DM 推送简介 : 全称 Cloudto Device Messaging,&Google 提供的 推送解决方案;-- 运行方式 : 提供一个轻量级机制, 允许服务器通知应用程序, 主动与客户端进行数据交互, 处理消息排队, 并向运行于目标设备的应用程序分发消息;-- 优点 : Google 提供的原生框架, 无需在应用中添加第三方代码 和 部署服务器端;-- 缺点 : 1.该推送依赖 Google 服务器, 需要绑定 Google 帐号, 目前在中国 Google 被屏蔽, 无法使用; 2. 许多手机厂商去掉了软件中的该模块;-- 运行机制图 :&(2) MQTT 推送 (IBM)MQTT 推送简介 : MQTT 是轻量级的消息发布|订阅协议,&-- 优点 : 省电, 省流量, 轻量级, 有 C++ 版的服务器端组件 RSMB;-- 缺点 : RSMB 不开源, 部署成本高, 比较复杂;-- IBM相关MQTT官网 :& ;RSMB 服务器端 : 全称&Really Small Message Broker, IBM 提供;-- 工作方式 : 在服务器端, 接收消息, 并将 消息 传输给指定移动设备;-- 地址 :& ;MQTT 推送示例 :&-- 客户端 :& ;-- 服务器端 PHP&:& ;(3) 基于 XMPP 的 AndroidPN&推送 (开源)XMPP 推送简介 :&-- XMPP 简介 : 全称&Extensible Messaging and Presence Protocol (可扩展通讯和表示协议),&基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测, 该协议允许因特网用户向因特网上的其他任何人发送即时消息;-- AndroidPN : 基于 XMPP 协议开发的 Java 开源 Android 推送通知实现, 包含了完整的客户端 和 服务器端;-- 项目主页 :& ;-- 原理图 :&AndroidPN 缺陷 : 如果使用该框架进行推送, 需要在了解 XMPP 和 anroidPN 基础上进行大量的二次开发;-- 连接中断 : 连接时间过长, 连接会中断, 收不到消息;-- 稳定性差 : 该框架不是很稳定;-- 纠错机制 : 消息推送出去后, 不检查是否推送到客户端, 推送出去就不管了;3. 推送 4s 评价标准4S 标准 :&Safe(安全), Stable(稳定), Save(省电省流量省成本), Slim(体积小);(1) Safe (安全)推送安全标准 :&-- 透明传输 : 只负责点对点的传输的质量, 不关心中间的传输介质 与 传输业务逻辑 协议等;-- 加密方案 : 信息需要加密, 另外推送的 ID 系统需要独立与后台已有的 ID 系统;(2) Stable (稳定)服务器稳定 : 长链接方案对服务器开销要求很高, 服务器端开发难度很大;-- 在线峰值 : 同时在线连接数到达100万的稳定性;-- 并发时延 : 高并发时的消息平均延迟, 一分钟处理 100万 条数据;-- 服务器稳定 : 稳定性时延占总时间的 99.9%, 有备份和负载均衡的机制;客户端稳定 : 中国网络状况复杂, 手机长时间联网比较难, 稳定性比较难, 开发时要考虑每个省的每个运营商, 每款手机的机型;-- 联网时间 : 每日联网时间 23.5 小时以上;-- 消息到达率 : 消息收到后 9 小时内客户端的消息到达率;(3) Save (节省)节省评判 :&-- 电量节省 : 注意 CPU 休眠率, 服务短待机时间百分比评判;-- 流量节省 : 处理协议 和 冗余数据包, 使用空载待机月流量评判;-- 成本节省 : 单服务器同时承载连接数, 同时承载连接数越多, 成本越低, 个推单服务器连接 300 万(业内顶尖水平);(4) Slim (体积小)集成 SDK 大小 : 客户端推送的 SDK 的大小尽量小, 一般要小于 300K;二. 极光推送概述1. 功能概述极光推送基本功能 : 主动 即时 的向用户发起交互, 可以发送聊天消息;-- 作用 : 通过向 精准 的目标用户推送 有价值 的消息, 可以提供用户忠诚度, 提高留存率;(1) 推送方式推送方式简介&:&-- 通知 : 推送文本内容, 展示在通知栏中;-- 自定义消息 : 推送自定义消息, 给用户自行处理;-- 富媒体 : 推送 HTML 页面内容;(2) 推送目标推送目标简介 :&-- 广播推送 : 向所有用户发送广播消息;-- 标签推送 : 根据用户设置的标签分组, 向某一组推送消息;-- 别名推送 : 客户端绑定用户别名, 向单个用户推送信息;(3) 用户分群用户分群简介 : 可以根据 JPush 提供的 多条件组合, 对用户进行群组划分, 实现 实时筛选推送;(4) 推送历史推送历史简介 : 通过 WEB 或者 API 发出的推送, 都可以在推送历史记录中查询到, 并可以实时显示推送结果;2. 推送框架推送框架&:&-- 推送数据源 : 自己开发的服务器端 或者 使用 极光推送官网的 WEB 后台;-- JPush API : 部署在服务器端, 开发者的服务器端发起推送时, 将数据传到 JPush API 中, 然后再向下传递;-- 建立长链接 : 集成 JPush 的 SDK 客户端启动后会建立一个到 JPush Cloud 的长链接, 提供 App 永远在线的能力;&-- 原理图 :&3. 极光推送原理参考文章(极光推送官方博客)&:&&;(1) 客户端原理IP地址 分配原理&:&--&IP 地址有限&: IPv4 的 IP 地址数量有限, 运营商要动态地为 手机分配 IP 地址, 这些 IP 地址都是运营商的内网 IP;--&网络地址转换 (NAT)&: 全称&Network Address Translation, 网关维护一个外网 IP 地址, 与 内网 IP 地址对应;--&外网 IP 不固定&: 由于运营商持有的外网 IP 数量有限, 需要动态的分配给接入运营商的用户, 因此在手机一段时间没有数据传输时会将该手机分配的外网 IP 地址收回, 分配给其它用户;--&解决方案&: Android 手机端想要保持长链接, 首先外网 IP 地址不能变, 不能让运营商收回 这个 IP 地址;Android 手机端实现方案&:&--&心跳&: 为了长时间保持外网 IP, 需要客户端定期发送心跳给运营商, 以便刷新 NAT 列表;--&Timer 定时方法&: 该类计划循环执行定时任务, 但是使用该类会使 CPU 保持唤醒状态, 比较费电;--&AlarmManager 定时方法&: 该类封装了 Android 手机的 RTC 硬件时钟模块, 可以在 CPU 休眠时正常运行, 定时任务执行时再唤醒 CPU, 这样做到了电量节省;(2) 服务器原理C10K 问题 : 单台服务器解决 同时保持一万长链接的性能问题;4. Android SDK 简介Android SDK 本质 : JPush SDK 集成到 Android APP 中后, 作为一个 Service 在 Android 端长期运行, 始终与 服务器端 保持者长链接, 相当与永远在线;(1) 多平台支持多平台支持 :&-- 手机芯片类型 : 一般的手机是 ARM 芯片, 但是有些手机是 MIPS 芯片 或者 x86 芯片;-- so 库支持 : 每个 CPU 芯片类型对应的 so 库, 都需要特殊编译, 无法跨平台调用, 如 ARM 平台的 so 库在 x86 平台就无法运行;(2) 电量与流量说明流量消耗 : JPush 的协议是自定义的, 协议的数据量经过了精简, 流量消耗非常少;&电量消耗 : JPush 心跳保持连接时可以在 CPU 不唤醒的情况下执行, 减少了不必要的代码运行, 电量非常节省;(3) 相关库说明JPush 依赖库 :&-- .so 依赖库内容 : JPush 需要一个 so 动态库, 该库是 C 语言编写, 在 Linux 下进行交叉编译而来, 可以在 ARM 芯片的手机上运行;-- jar 依赖库内容 : 对 Java 代码的封装;三. 极光推送简单 DemoDemo 概述 : JPush 官方提供了一个简单 Demo, 向我们演示了 JPush 基本的推送流程, 基本步骤分为下面几块, 即-- Web 配置操作部分 : 包括 注册开发者帐号, 创建应用;-- 下载手机示例&: 下载系统自动生成的 Android 应用示例;-- 发送推送指令 : 在 Web 端发送推送指令, 手机端接收该指令;-- 官方地址 : 关于该模块详细信息可参考官方文档,&;1. Web 配置操作(1) 帐号创建该步骤就不再赘述, 普通的帐号注册即可;(2) 创建应用创建应用步骤 :&-- 创建应用界面 :& ;-- 创建应用 : 点击 创建应用 按钮即可;-- 配置应用信息 : 输入应用名称, 上传一个图标, 然后填写一个包名, JPush 系统会在后台根据你输入的包名生成的推送的 Android 应用 Demo, 该 Demo 包含了该配置的信息;查看应用设置界面 :&2. 下载导入 Android 应用源码(1) 下载 Android 应用源码下载源码 : 在应用设置的 Android 模块, 有 &下载 Android Example& 按钮, 点击该按钮即可下载 Android 应用;(2) 导入 Android 应用源码将下载后的源码解压, 不用任何修改, 即可导入到应用中运行;3. 发送推送(1) 不初始化推送无效直接在后台推送 : 我们在 Android 手机界面不做任何操作, 直接在网页后台推送消息;&-- 发送通知 : 在应用的 &推送& 模块, 点击发送通知按钮;-- 输入推送内容 : 输入任意推送内容 &Jpush Demo Send By octopus 1.&, 点击页面最下方的 &立即发送& 按钮;--&对话框选择&: Web 界面会弹出对话框, 提示是否发送, 选 &发送吧& 即可;-- 查看推送结果 : 点击之后又弹出对话框, 点击 &去看看& 可以查看推送结果;-- 推送结果分析 : 点击上面的 &去看看& 可以查看推送结果, 点击 &推送历史& 按钮, 也可一查看推送结果; 由于我们没有在 客户端进行初始化, 因此推送没有成功;(2) 初始化后推送初始化之后推送 :&-- 手机端初始化 : 点击手机端的 &initPush& 按钮, 进行初始化;-- 发送消息 : 发送 &Jpush Demo Send By octopus 2.& 消息, 此时连上一次推送的消息也送达, 网络不同会延迟一定时间;-- 查看发送结果 : 此时显示的推送, 两次都成功了;(3) 停止 和 恢复 推送功能停止恢复推送功能 : 当点击停止推送 &stopPush& 按钮时, 推送手机端就不会再接收推送内容, 当点击恢复推送时, 会将期间积攒的所有推送内容一次性推送到手机中;四. Android 应用集成 JPush1. 依赖库拷贝(1) SDK 简介SDK 下载&: 最新的 SDK 压缩包&Jpush-Android-sdk-1.7.3.-- JPush SDK 下载页面 :-- Android SDK 下载地址 :&详细文件说明 : 将&Jpush-Android-sdk-1.7.3.zip 解压, 解压后的目录是&Jpush-Android--- 查看文档目录 : 使用&tree -L 3 命令, 查看深度为 3 的路径结构;octopus@octopus:~/JPush/Jpush-Android-sdk$ tree -L 3
├── AndroidManifest.xml
├── ChangeLog.txt
├── doc
│&& └── Jpush-sdk-集成指南.pdf
├── example
│&& ├── AndroidManifest.xml
│&& ├── libs
│&& │&& ├── armeabi
│&& │&& ├── armeabi-v7a
│&& │&& └── jpush-sdk-release1.7.3.jar
│&& ├── proguard-project.txt
│&& ├── project.properties
│&& ├── res
│&& │&& ├── drawable-hdpi
│&& │&& ├── drawable-ldpi
│&& │&& ├── drawable-mdpi
│&& │&& ├── drawable-xhdpi
│&& │&& ├── layout
│&& │&& ├── values
│&& │&& └── values-zh
│&& └── src
└── com
└── libs
├── armeabi
│&& └── libjpush173.so
├── armeabi-v7a
│&& └── libjpush173.so
└── jpush-sdk-release1.7.3.jar--&AndroidManifest.xml (配置文件) : 这是 Android 应用的主要配置文件示例;--&ChangeLog.txt (升级说明) : SDK 版本升级的说明;-- doc (文档)&: doc 目录下 有个 &Jpush-sdk-集成指南.pdf& 文档, 这是集成 JPush 文档;-- example (代码示例) :&example 明显是个 Android 示例--&libs (依赖库) : Android 应用中相关库, 放在这个目录中,&libjpush173.so 是依赖的 C 底层库,&jpush-sdk-release1.7.3.jar 是依赖的 Java 库;(2) 拷贝 依赖库 到 Android 应用中执行过程 :&-- 创建应用 : 创建一个空应用, 注意应用最小版本应大于 2.1, 否则不能支持极光推送, 应用的包名为 cn.org.octopus.jpush.demo 即可, 不用在后台另外创建一个-- 拷贝依赖库 : 在工程根目录下创建一个 libs 目录, 拷贝&jpush-sdk-release1.7.3.jar 到 libs 目录中, 将&armeabi/libjpush173.so 和&armeabi-v7a/libjpush173.so 拷贝到 libs 目录, 注意要连文件夹一起拷贝, 拷贝完后如下图;2. 配置 AndroidManifest.xml 文件(1) 权限配置JPush 定义权限 : JPush 定义了一个权限, 允许应用接收 JPush 代码发送的广播消息,&You Package.permission.JPUSH_MESSAGE, 注意要使用你的包名替换其中的 Your P&!-- Required --&
&permission android:name=&Your Package.permission.JPUSH_MESSAGE& android:protectionLevel=&signature& /&用户权限 :&&!-- Required --&
&uses-permission android:name=&You Package.permission.JPUSH_MESSAGE& /&
&uses-permission android:name=&android.permission.RECEIVE_USER_PRESENT& /&
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.WAKE_LOCK& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.READ_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.VIBRATE& /&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.WRITE_SETTINGS& /&可选用户权限 :&
&!-- Optional. Required for location feature --&
&uses-permission android:name=&android.permission.ACCESS_COARSE_LOCATION& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_FINE_LOCATION& /&
&uses-permission android:name=&android.permission.ACCESS_LOCATION_EXTRA_COMMANDS& /&
&uses-permission android:name=&android.permission.CHANGE_NETWORK_STATE& /&(2) 配置 JPush 服务JPush 服务 :&-- 推送服务 :&
&!-- Required --&
android:name=&cn.jpush.android.service.PushService&
android:enabled=&true&
android:exported=&false& &
&intent-filter&
&action android:name=&cn.jpush.android.intent.REGISTER& /&
&action android:name=&cn.jpush.android.intent.REPORT& /&
&action android:name=&cn.jpush.android.intent.PushService& /&
&action android:name=&cn.jpush.android.intent.PUSH_TIME& /&
&/intent-filter&
&/service&-- 下载服务 :&
&!-- Required SDK核心功能--&
android:name=&cn.jpush.android.service.DownloadService&
android:enabled=&true&
android:exported=&false& &
&/service&(3) 配置 JPush 广播接收者JPush 广播接收者配置 :&-- 推送接收者 :&&!-- Required --&
android:name=&cn.jpush.android.service.PushReceiver&
android:enabled=&true& &
&intent-filter android:priority=&1000&& &!--since 1.3.5 --&
&action android:name=&cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY& /& &!--since 1.3.5 --&
&category android:name=&Your Package& /& &!--since 1.3.5 --&
&/intent-filter& &!--since 1.3.5 --&
&intent-filter&
&action android:name=&android.intent.action.USER_PRESENT& /&
&action android:name=&android.net.conn.CONNECTIVITY_CHANGE& /&
&/intent-filter&
&intent-filter&
&action android:name=&android.intent.action.PACKAGE_ADDED& /&
&action android:name=&android.intent.action.PACKAGE_REMOVED& /&
&data android:scheme=&package& /&
&/intent-filter&
&/receiver&-- 时钟相关接收者 :&
&!-- Required SDK核心功能--&
&receiver android:name=&cn.jpush.android.service.AlarmReceiver& /&(4) 配置 渠道 和 推送标识渠道 和 AppKey 配置 :&
&!-- Required. For publish channel feature --&
&!-- JPUSH_CHANNEL 是为了方便开发者统计APK分发渠道。--&
&!-- 例如: --&
&!-- 发到 Google Play 的APK可以设置为 google- --&
&!-- 发到其他市场的 APK 可以设置为 xxx-market。 --&
&!-- 目前这个渠道统计功能的报表还未开放。--&
&meta-data android:name=&JPUSH_CHANNEL& android:value=&developer-default&/&
&!-- Required. AppKey copied from Portal --&
&meta-data android:name=&JPUSH_APPKEY& android:value=&Your AppKey&/& (5) 最终的配置文件配置好的文件 :&&?xml version=&1.0& encoding=&utf-8&?&
&manifest xmlns:android=&/apk/res/android&
package=&cn.org.octopus.jpush.demo&
android:versionCode=&1&
android:versionName=&1.0& &
android:minSdkVersion=&17&
android:targetSdkVersion=&19& /&
&permission android:name=&cn.org.octopus.jpush.demo.permission.JPUSH_MESSAGE& android:protectionLevel=&signature& /&
&uses-permission android:name=&cn.org.octopus.jpush.demo.permission.JPUSH_MESSAGE& /&
&uses-permission android:name=&android.permission.RECEIVE_USER_PRESENT& /&
&uses-permission android:name=&android.permission.INTERNET& /&
&uses-permission android:name=&android.permission.WAKE_LOCK& /&
&uses-permission android:name=&android.permission.READ_PHONE_STATE& /&
&uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.READ_EXTERNAL_STORAGE& /&
&uses-permission android:name=&android.permission.VIBRATE& /&
&uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS& /&
&uses-permission android:name=&android.permission.ACCESS_NETWORK_STATE& /&
&uses-permission android:name=&android.permission.WRITE_SETTINGS& /&
&uses-permission android:name=&android.permission.ACCESS_COARSE_LOCATION& /&
&uses-permission android:name=&android.permission.ACCESS_WIFI_STATE& /&
&uses-permission android:name=&android.permission.CHANGE_WIFI_STATE& /&
&uses-permission android:name=&android.permission.ACCESS_FINE_LOCATION& /&
&uses-permission android:name=&android.permission.ACCESS_LOCATION_EXTRA_COMMANDS& /&
&uses-permission android:name=&android.permission.CHANGE_NETWORK_STATE& /&
&application
android:allowBackup=&true&
android:icon=&@drawable/ic_launcher&
android:label=&@string/app_name&
android:theme=&@style/AppTheme&&
android:name=&.MainActivity&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&
android:name=&cn.jpush.android.service.PushService&
android:enabled=&true&
android:exported=&false& &
&intent-filter&
&action android:name=&cn.jpush.android.intent.REGISTER& /&
&action android:name=&cn.jpush.android.intent.REPORT& /&
&action android:name=&cn.jpush.android.intent.PushService& /&
&action android:name=&cn.jpush.android.intent.PUSH_TIME& /&
&/intent-filter&
&/service&
android:name=&cn.jpush.android.service.DownloadService&
android:enabled=&true&
android:exported=&false& &
&/service&
android:name=&cn.jpush.android.service.PushReceiver&
android:enabled=&true& &
&intent-filter android:priority=&1000&&
&action android:name=&cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY& /&
&category android:name=&cn.org.octopus.jpush.demo& /&
&/intent-filter&
&intent-filter&
&action android:name=&android.intent.action.USER_PRESENT& /&
&action android:name=&android.net.conn.CONNECTIVITY_CHANGE& /&
&/intent-filter&
&intent-filter&
&action android:name=&android.intent.action.PACKAGE_ADDED& /&
&action android:name=&android.intent.action.PACKAGE_REMOVED& /&
&data android:scheme=&package& /&
&/intent-filter&
&/receiver&
&receiver android:name=&cn.jpush.android.service.AlarmReceiver& /&
&meta-data android:name=&JPUSH_CHANNEL& android:value=&developer-default&/&
&meta-data android:name=&JPUSH_APPKEY& android:value=&fd5eebd555ca4a5a80c4b3d8&/&
&/application&
&/manifest&3. 推送测试后台推送 :&-- 控制台地址 :&/common/apps/ ;-- 发起推送 : 进入控制台, 点击对应的应用, 进入推送页面;-- 查看结果 :&-- 推送统计 :&五. JPush 相关 API1. 初始化 停止 恢复 推送推送控制方法 :&-- 初始化推送 :&JPushInterface.init(Context context), 初始化之后才能接收推送消息;-- 恢复推送 :&JPushInterface.resumePush(Context context), 停止推送后, 调用该方法, 即可恢复推送;-- 停止推送 :&JPushInterface.stopPush(Context context), 调用该方法之后, 手机便收不到推送信息了;代码示例 :& public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.init_jpush:
//初始化 JPush, 初始化之后才可以进行推送, 否则推送失败
JPushInterface.init(this);
//设置调试模式, 可以在 LogCat 中查看 JPush 日志
JPushInterface.setDebugMode(true);
case R.id.start_jpush:
//恢复推送
JPushInterface.resumePush(getApplicationContext());
case R.id.stop_jpush:
//停止推送
JPushInterface.stopPush(getApplicationContext());
}界面效果及说明 :&-- 界面效果 :&-- 按钮说明 : 点击 &初始化& 按钮就可以接收推送消息, 点击 &停止推送& 按钮手机停止接收消息推送, 点击 &恢复推送& 即开始接收推送消息;2. 根据 别名 和 标签 分组推送参考文档 :&(1) 概念介绍别名 :&-- 作用 : 别名用于代表安装了应用的用户, 每个用户对应着一个别名;-- 用户与别名对应性 (多对一) : 每个用户只能指定一个别名, 一个别名可以同时指定给多个用户, 给别名发消息时, 会同时给所有设置该别名的用户发消息;标签 :&-- 作用 : 方便开发者根据标签发送推送消息;-- 用户与标签对应性(多对多) : 一个用户可以有多个标签, 一个标签可以设置给多个用户;(2) 设置别名标签接口方法设置别名与标签方法 :&-- 方法接口 :&public static void setAliasAndTags(
Context context,
//上下文对象
String alias,
//别名, 只能设置一个别名
Set&String& tags,
//标签集合, 可设置多个标签
TagAliasCallback callback) //回调接口, 其中有一个 gotResult 接口方法, 系统回传入错误码给 responseCode 参数-- 别名设置说明 : a. 设置 null(没有地址) 即不设值值; b. 设置 && (初始化后) 即清空之前的设置; c. 设置会覆盖之前的设置; d. 长度 40字节 UTF8 编码;-- 标签设置说明 :&a. 设置 null(没有地址) 即不设值值; b. 设置 空集合(没有数据, 已经初始化) 即清空之前的设置; c. 设置会覆盖之前的设置; d. 每个标签长度 40字节 UTF8 编码, 最多 100 个标签;设置别名方法 :&-- 方法接口 :&public static void setAlias(
Context context,
//上下文对象
String alias,
//别名内容
TagAliasCallback callback) //回调接口-- 参数说明 : 该参数与&setAliasAndTags 方法参数相同;设置标签方法 :&-- 方法接口 :&public static void setTags(
Context context,
Set&String& tags,
TagAliasCallback callback)-- 参数说明 :&该参数与&setAliasAndTags 方法参数相同;过滤无效标签 : 感觉这纯属 JPush API 定义缺陷, 这个应该对我们隐藏才对;-- 方法接口 :&public static Set&String& filterValidTags(Set&String& tags)-- 作用 : 设置标签时如果 标签Set集合 &中有一个是无效的, 那么整个设置都无效, 应该是设计缺陷, 后期修补 BUG 的权益之际;回调接口 :&TagAliasCallback 回调接口;-- 方法接口 :&public void gotResult(
int responseCode,
String alias,
Set&String& tags); //标签集合代码示例 :&-- 设置方法代码 :&
String alias = set_alias.getText().toString();
String tag = set_tag.getText().toString();
Set&String& set = new HashSet&String&();
set.add(tag);
JPushInterface.setAliasAndTags(
getApplicationContext(),
Log.i(TAG, &已设置别名 与 标签&);-- 回调方法 :& @Override
public void gotResult(int arg0, String arg1, Set&String& arg2) {
Log.i(TAG, &错误码 : & + arg0 + & , 别名 : & + arg1);
}-- 手机端设置 :&-- 后台发送极光推送 :&-- 设置标签 :&-- 标签报错 : 如果设置的标签没有手机注册, 会出现如下报错;-- 推送结果 :&-- 推送通知消息 :&3. 根据&RegistrationID 进行单机推送参考文档&:&&(1) 概念介绍RegistrationID 简介 : 应用第一次注册到 JPush 后台时, 会生成一个唯一的设备标识&RegistrationID, 每个设备不重复;&(2) 获取&RegistrationID&方法接口 :&//SDK 初次注册成功后,开发者通过在自定义的 Receiver 里监听 Action - cn.jpush.android.intent.REGISTRATION 来获取对应的 RegistrationID。注册成功后,也可以通过此函数获取
public static String getRegistrationID(Context context)-- 获取&RegistrationID 代码 :&
//获取 RegistrationID
String registrationid = JPushInterface.getRegistrationID(getApplicationContext());
tv_registrationid.setText(&RegistrationID : & + registrationid);-- 界面示例 :&&-- 后台推送设置 :&4. 清除通知清除通知简介 :&-- 方法接口 :&public static void clearAllNotifications(Context context);-- 代码示例 :&case R.id.clear_notification:
//清除所有通知
JPushInterface.clearAllNotifications(getApplicationContext());
-- 效果 : 在后台发送一条消息, 点击清除按钮, 所有的推送通知都清除;5. 推送时间限制(1) 设置允许推送时间方法接口 :&public static void setPushTime(
Context context,
//上下文对象
Set&Integer& weekDays,
//允许接收推送的 一周天数
int startHour,
//开始时间
int endHour)
//结束时间-- 代码示例 :&Set&Integer& days = new HashSet&Integer&();
days.add(1);
days.add(2);
days.add(3);
days.add(4);
days.add(5);
JPushInterface.setPushTime(getApplicationContext(), days, 10, 23);(2) 设置禁止推送时间方法接口 :&public static void setSilenceTime(
Context context,
//上下文对象
int startHour,
//开始时间-小时
int startMinute,
//开始时间-分钟
int endHour,
//结束时间-小时
int endMinute)
//结束时间-分钟-- 代码示例 :&JPushInterface.setSilenceTime(getApplicationContext(), 22, 30, 8, 30);作者&: octopus_truth转载请注明出处&:&http://blog.csdn.net/shulianghan/article/details/
更多相关文章
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: /android-game/346.html 在这里先向各位童鞋道个歉!我解释下:当我在给大家讲解的时候会附带上源码,可是这个源码是演示代码,为了让 ...
李华明Himi 原创,转载务必在明显处注明:转载自 原文链接: /android-game/346.html
在这里先向各位童鞋道个歉!我解释下:当我在给大家讲解的时候会附带上源码,可是这个源码是演示代码,为了让大家看的清楚,所以我会 ...
转载 /Trinea/android-open-project [Android开源项目分类汇总] /android-cn/android-open-project-analysis [Android 优秀开源项目实现原理解析] ...
Windows CE系统开发,BSP包中的几个常见文件详解 BSP介绍(Board Support Package)是介于底层硬件和上层软件之间的底层软件开发包,它主要功能为屏蔽硬件,提供操作系统及硬件驱动,具体功能包括: (1)
单板硬件初始化,主要是CPU的初始化,为整个软件系统提供底 ...
Jquery遍历筛选数组的几种方法和遍历解析json对象Map()方法详解一.Jquery遍历筛选数组1.jquery grep()筛选遍历数组 $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var filterarray = $.g ...
紧接上篇博文&MariaDB/Mysql之主从架构的复制原理及主从/双主配置详解(一)& 3.深入了解复制 3.1.基于语句的复制(Statement-Based Replication) MySQL 5.0及之前的版本仅支持基于语句的复制(也叫做逻辑复制,logical replica ...
上一讲我们讲解XML解析中第二种解析XML的方式SAX解析,讲了基于SAX解析的过程: SAX方式解析XML文档深入详解 ,现在我们练习一下. 1. 练习SAX解析XML,主要是明白一下SAX解析中的事件触发机制. 有一个XML文档,如下所示 &?xml version=&1.0 ...
一.前言自从去年中微信添加抢红包的功能,微信的电商之旅算是正式开始正式火爆起来.但是作为Android开发者来说,我们在抢红包的同时意识到了很多问题,就是手动去抢红包的速度慢了,当然这些有很多原因导致了.或许是网络的原因,而且这个也是最大的原因.但是其他的不可忽略的因素也是要考虑到进去的,比如在手机 ...
你所不了解的javascript操作DOM的细节知识点(一) 一:Node类型 DOM1级 ...
小时候(小学.中学.高中时)我最讨厌古文和诗词,觉得那些文言文真是枯燥.迂腐之至,而且从小学到高中的每一个语文老师总是死抠其中的每一个字的意思,我连整篇文章是什么意思都没搞明白,又怎么能搞懂其中某个字的意思呢,更可恨 ...
1,安装linux的时候在设置时间的时候有一个选项:system clock uses UTC,那么这个UTC是什么意思呢? 世界协调时间(Universal Time Coordinated,UTC)GPS 系统中 ...
第一,存文件必须以一种编码存:读文件也必须以一种编码读,如不特别设置,去系统默认的编码,中文windows为GBK编码. 从.java-&.class过程是,先编写.java文件并按莫种编码方式保存,然后用ja ...
关于Linux目录和文件的权限的浅谈 .第一个属性表示这个文件是&目录,文件,连接文件 [d]:目录 [-]:文件 [l]:链接文件 [b]:设备文件中可供存储的接口设备 [c]:设备文件中的串行端口设备
再加一个定义:Dim pageIndex As Integer (8)显示页码的相关css a.juanZeng_xianShi_yeMa1 { color :#D22E46; margin-left :5 f ...
最近半年都在断断续续地学习使用python,基本语法和基本编程思想都差不多了解了.就是一知 ...
经过大学四年的学习和一些项目经历,最初什么都不会需要各种百度,逼自己学会搜索知识磕磕盼盼地前进,后来发现技术博客是一种很好的学习方式,前人将自己的经验精炼地总结出来,使初入门者可以方便地学习,对于技术 ...
js多个cookie需要单独设置 ===================================设置cookie(不加路径,临时cookie) document.cookie=&UserName=1 ...
当我尝试使用curl和管道操作符直接传给php的去执行下载回来的install的时候报错了:$ curl -s https://getcomposer.org/installer | php #!/usr/bin/e ...

我要回帖

更多关于 replica 使用 的文章

 

随机推荐