cocos2d-x集成友盟消息推送SDK(Android版)

前端之家收集整理的这篇文章主要介绍了cocos2d-x集成友盟消息推送SDK(Android版)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言:自己摸索研究友盟消息推送功能,Android和ios平台均测试通过。记录下来以备忘。中间踩了不少坑,尤其是ios关于证书的坑。友盟官方文档Android部分写得比较详尽,ios部分写得比较烂。本篇是cocos2d-x集成友盟消息推送功能Android部分,大部分参考Android 消息推送(Message) SDK 集成指南ios部分请见另一篇。

省略的内容

创建Android应用

1.进入友盟消息中心,创建安卓应用



2.点击添加应用获得AppKey


导入SDK所需的jar包

将下载的SDK压缩包解压,将其中的libs文件夹中的文件复制到安卓工程的libs目录下。
该SDK需要最新版本的 android-support-v4.jar 该jar包在SDK压缩包中的PushExamle2/libs中包含,可以复制到工程的libs目录下来用。
在Eclipse ADT中refresh一下。

配置AndroidManifest.xml

1.添加权限

在<mainfest>标签添加
<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.添加组件

在<application>标签添加
<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
<Meta-data
    android:name="UMENG_APPKEY"
    android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</Meta-data>
<Meta-data
    android:name="UMENG_MESSAGE_SECRET"
    android:value="xxxxxxxxxxxxxxxxxxxxxxxxxxxx" >
</Meta-data>
注意:上述写法和如下写法相同,为xml的不同写法
<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。
<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.开启推送服务

打开Eclipse ADT,在【Package Explorer】---->【src】--->【项目名.java】的Activty的onCreate()函数添加如下代码
PushAgent mPushAgent = PushAgent.getInstance(this);
mPushAgent.enable();
mPushAgent.onAppStart();//如果不调用方法,将会导致按照"几天不活跃"条件推送失效。

2.获取设备的Device Token

可以在Debug模式下的logcat中看到Device Token,也可以在Activity的onResume()函数添加如下代码

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集成成功。

猜你在找的Cocos2d-x相关文章