前言:自己摸索研究友盟消息推送功能,Android和ios平台均测试通过。记录下来以备忘。中间踩了不少坑,尤其是ios关于证书的坑。友盟官方文档Android部分写得比较详尽,ios部分写得比较烂。本篇是cocos2d-x集成友盟消息推送功能的Android部分,大部分参考Android 消息推送(Message) SDK 集成指南。ios部分请见另一篇。
省略的内容
- 什么是友盟
- 注册友盟账号
- [申请开通友盟消息推送服务]
- [下载友盟消息推送SDK(Android)]
创建Android应用
1.进入友盟消息中心,创建安卓应用
2.点击添加应用获得AppKey
导入SDK所需的jar包
该SDK需要最新版本的
android-support-v4.jar
该jar包在SDK压缩包中的PushExamle2/libs中包含,可以复制到工程的libs目录下来用。
在Eclipse ADT中refresh一下。
配置AndroidManifest.xml
1.添加权限
@H_404_104@<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!--【可选】如果需要设置前台是否显示通知,需要设置这个权限-->
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2.添加组件
@H_404_104@<receiver
android:name="com.umeng.message.NotificationProxyBroadcastReceiver"
android:exported="false" >
</receiver>
<receiver android:name="com.umeng.message.RegistrationReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<data android:scheme="package" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<receiver android:name="com.umeng.message.UmengBroadcastReceiver" >
<intent-filter>
<action android:name="org.agoo.android.intent.action.RECEIVE" />
</intent-filter>
<intent-filter>
<action android:name="【应用包名】.intent.action.COMMAND" />
</intent-filter>
<intent-filter>
<action android:name="org.agoo.android.intent.action.RE_ELECTION_V2" />
</intent-filter>
</receiver>
<receiver android:name="com.umeng.message.BootBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
注意把【用用包名】替换为自己应用的包名。
注意把【用用包名】替换为自己应用的包名。
形如 xxx.xxx.xxx.intent.action.COMMAND
3.添加AppKey和Umeng Message Secret
在<application>标签下添加:填写刚刚申请到的AppKey和Message Secret
@H_404_104@<Meta-data
android:name="UMENG_APPKEY"
android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</Meta-data>
<Meta-data
android:name="UMENG_MESSAGE_SECRET"
android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</Meta-data>注意:上述写法和如下写法相同,为xml的不同写法
@H_404_104@<Meta-data android:name="UMENG_APPKEY" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
<Meta-data android:name="UMENG_MESSAGE_SECRET" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" />如果不使用友盟的服务器,可以不填写
Umeng Message Secret
4.添加Channel ID
Channel ID用于友盟区分标记是在哪个平台(渠道)发布的安卓应用,比如360市场,91,百度等。如果在360市场发布,则Channel ID请填写你用于标记360市场的标签。如果需要在多个平台(渠道)发布应用,并且需要友盟区分是哪个平台(渠道),则每个发布平台需要单独生成安装包发布。并填写好用于你自己区分的Channel ID。
@H_404_104@<Meta-data
android:name="UMENG_CHANNEL"
android:value="360啦啦啦" >//名称随便填,只要自己知道就行
</Meta-data>
mPushAgent.setMessageChannel();
说明
- 若同时在AndroidManifest.xml和代码设置了MessageChannel,则以代码设置的为准。
- 若在AndroidManifest.xml和代码里均没有设置,则使用Unknown作为Channel ID。
- 你可以使用20位以内的英文和数字为渠道定名(不要使用纯数字)。
- 友盟消息推送可以和友盟统计分析共用一个"Channel ID"字段。
- 你可以使用友盟渠道打包工具,一次生成多个渠道包。
添加代码
1.开启推送服务
PushAgent mPushAgent = PushAgent.getInstance(this); mPushAgent.enable(); mPushAgent.onAppStart();//如果不调用此方法,将会导致按照"几天不活跃"条件推送失效。
2.获取设备的Device Token
String device_token = UmengRegistrar.getRegistrationId(this); device_token = UmengRegistrar.getRegistrationId(this); Log.d("mmmm","----------device_token: " + device_token);
打印Device Token。
说明
- Device Token为友盟生成的用于标识设备的id,长度为44位,不能定制和修改。同一台设备上每个应用对应的Device Token不一样。
- 获取Device Token的代码需要放在
mPushAgent.enable();
后面,注册成功以后调用才能获得Device Token。 - 如果返回值为空, 说明设备还没有注册成功, 需要等待几秒钟,同时请确保测试手机网络畅通。
此段说明表明Android的Device Token由友盟生成,并且同一个设备上的不同应用对应的Device Token都不同。并且在联网状态下注册成功后才能获得Device Token,这就是获取函数放在onResume()函数中的原因,这样可以多次调用到。如果第一次为null,可以尝试重复唤醒调用。
ios与Android不同,ios的Device Token与系统绑定,同一台设备每个应用对应的Device Token是相同的。
连接真机,在Debug模式下运行项目,获取Device Token。如果控制台没有看到Device Token,尝试使用断点查看device_token变量的值。
测试推送消息
1.添加测试设备
在
友盟消息推送服务后台的【测试模式】中添加测试设备。
2.发送测试消息
在测试手机联网的状态下,在友盟消息推送服务器后台中发送测试消息。在【发送给】选项中可以填写Device Token选择单播发送,如果在测试设备商收到消息,表明SDK集成成功。