安卓进阶第三篇之腾讯信鸽推送的简单使用

由于Android暂时没办法使用系统级的推送服务,再加上千奇百怪的第三方rom,所以我们不得不选择一款成
熟的第三方平台做我们的推送服务。现在市场上的推送平台很多,比如信鸽、极光、小米、友盟、阿里推送等,由于自己的项目中使用的是信鸽推送,所以我就简单说说使用信鸽推送的流程。

1.首先第一步,在信鸽官网 (http://xg.qq.com)注册账号并登录,然后点击“介入推送应用”

登录成功后就可以看到

2.输入应用名称、包名并选择所属分类,点击“接入应用”

注意:包名不要写错

3.提示成功之后在应用列表界面就可以看到创建的应用了

新创建的应用

4.创建好了应用,接下来就是在项目中的使用了,首先下载信鸽的sdk

点击下载sdk

5.解压sdk

6.先看看注意事项,毕竟都写了“必读”是吧(一定要看哈!)

7.集成到项目中也很简单,打开官方文档
http://developer.xg.qq.com/wiki/xg/Android%E6%8E%A5%E5%85%A5/Android%20SDK%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5/Android%20SDK%E5%BF%AB%E9%80%9F%E6%8E%A5%E5%85%A5.html
按照流程一步一步来,文档是已eclipse为例,那现在很多开发者都使用的是Android Studio,那我们就以AS为例:

(1).将信鸽 SDK目录下的libs目录所有文件拷贝到工程的libs目录下并导入项目

(2).添加.so文件

拷贝这个目录下所有的文件
将拷贝的文件放到jinLibs文件夹下面

(3).打开Androidmanifest.xml,添加以下配置(建议参考下载的sdk里面demo的配置文件)

<!-- 【必须】 信鸽SDK所需权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.VIBRATE" />
     <!-- 【常用】 信鸽SDK所需权限 -->
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 【可选】 信鸽SDK所需权限 -->
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BATTERY_STATS" />
  <!-- 【必须】 (2.30及以上版新增)展示通知的activity -->
        <activity
            android:name="com.tencent.android.tpush.XGPushActivity"
            android:theme="@android:style/Theme.Translucent"
            android:exported="false" >
            <intent-filter>
                 <!-- 若使用AndroidStudio,请设置android:name="android.intent.action"-->
                <action android:name="" />
            </intent-filter>
        </activity>

        <!-- 【必须】 信鸽receiver广播接收 -->
        <receiver
            android:name="com.tencent.android.tpush.XGPushReceiver"
            android:process=":xg_service_v2" >
            <intent-filter android:priority="0x7fffffff" >

                <!-- 【必须】 信鸽SDK的内部广播 -->
                <action android:name="com.tencent.android.tpush.action.SDK" />
                <action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
                <!-- 【必须】 系统广播:网络切换 -->
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                
                <!-- 【可选】 系统广播:开屏 -->
                <action android:name="android.intent.action.USER_PRESENT" />

                <!-- 【可选】 一些常用的系统广播,增强信鸽service的复活机会,请根据需要选择。当然,你也可以添加APP自定义的一些广播让启动service -->
                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
            <!-- 【可选】 usb相关的系统广播,增强信鸽service的复活机会,请根据需要添加 -->
            <intent-filter android:priority="0x7fffffff" >
                <action android:name="android.intent.action.MEDIA_UNMOUNTED" />
                <action android:name="android.intent.action.MEDIA_REMOVED" />
                <action android:name="android.intent.action.MEDIA_CHECKING" />
                <action android:name="android.intent.action.MEDIA_EJECT" />

                <data android:scheme="file" />
            </intent-filter>
        </receiver>
        <!-- 【必须】 信鸽service -->
        <service
            android:name="com.tencent.android.tpush.service.XGPushService"
            android:exported="true"
            android:persistent="true"
            android:process=":xg_service_v2" />

        <!-- 【必须】 通知service,其中android:name部分要改为当前包名 -->
        <service
            android:name="com.tencent.android.tpush.rpc.XGRemoteService"
            android:exported="true" >
            <intent-filter>
                 <!-- 【必须】 请修改为当前APP名包.PUSH_ACTION,如demo的包名为:com.qq.xgdemo -->
                <action android:name="com.qq.xgdemo.PUSH_ACTION" />
            </intent-filter>
        </service>
        
        <!-- 已废弃,可删除之;若不删除也不会有任何副作用 -->
        <!--<service
            android:name="com.tencent.android.tpush.service.XGDaemonService"
            android:process=":qq_push_daemon" />
        -->
        <!-- 【可选】信鸽拉起其他APP应用,若应用在本地找不到可以自动下载 -->
        <!--
              <service
            android:name="com.tencent.android.tpush.XGDownloadService"
            android:enabled="true"
            android:exported="false" />
        -->
        <!-- 【可选】APP实现的Receiver,用于接收消息透传和操作结果的回调,请根据需要添加 -->
        <!-- YOUR_PACKAGE_PATH.CustomPushReceiver需要改为自己的Receiver: -->
        <receiver android:name="com.qq.xgdemo.receiver.MessageReceiver" 
            android:exported="true" >
            <intent-filter>
                <!-- 接收消息透传 -->
                <action android:name="com.tencent.android.tpush.action.PUSH_MESSAGE" />
                <!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
                <action android:name="com.tencent.android.tpush.action.FEEDBACK" />
            </intent-filter>
        </receiver>

        <!-- 【必须】 请修改为APP的AccessId,“21”开头的10位数字,中间没空格 -->
        <meta-data
            android:name="XG_V2_ACCESS_ID"
            android:value="2100047428" />
        <!-- 【必须】 请修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 -->
        <meta-data
            android:name="XG_V2_ACCESS_KEY"
            android:value="AKH3A5485ETM" />

注意上面的注释,自己看,需要修改的地方已经写的很清楚了。

(4).启动并注册APP,打开工程的主Activity,在其onCreate(Bundle savedInstanceState)重载方法内,添加以下代码,完成信鸽服务的启动与APP注册过程(当然不是非要写在oncreate方法里面,根据自己的项目需要,自己可以修改位置)。

/** 
* 账号注册信鸽推送 
*/
private void getXGPushReceiver() {  
Context context = getApplicationContext();    
final PreferenceStorage ps = new PreferenceStorage(context);    
// 开启logcat输出,方便debug,发布时请关闭   
XGPushConfig.enableDebug(this, true);    
// 获取信鸽token   
XGPushManager.registerPush(context, ps.getUsername(),     new XGIOperateCallback() {                           @Override                
public void onSuccess(Object data, int flag) 
  {                  
   String mToken = (String) data;                                    
   LogUtils.d("TPush", "获取token:" + mToken);                    
  }                
 @Override               
 public void onFail(Object data, int errCode, String msg) 
  {                   
   Log.d(TAG, "获取token失败:");   
  }            
});  
 //(2.36之前的版本)已知MIUI V6上会禁用所有静态广播,若出现有类似的情况,请添加以下代码兼容该系统。   
 Intent service = new Intent(context, XGPushService.class);    context.startService(service);}

我这里选择的是使用账号进行注册,当然也可以选择使用APP进行注册(只需要修改注册的方法XGPushManager.registerPush(context)),不传用户名就可以啦,那么两种不同的注册方式有什么区别呢,我是这么理解的,如果使用账号进行注册,则只有这个账号登录后才可以收到推送,如果使用APP注册,则不管是哪个账号登录的,都可以收到推送。

(5).代码嵌入完成后,启动APP,如果在logcat中的TPush标签看到以下类似的输出,说明已经注册成功,并返回token。注意:Android Token长度为40位

(6).去管理台推送验证
前往信鸽前台,选择“创建通知”,输入“标题”和“内容”,点击“确认推送”。稍等几秒后,如果顺利的话,终端设备应该能够收到这条通知。此时,APP已经具备接收通知推送的能力。

(7) .可能碰到的问题解决方法
1.设备是否正常联网?
2.检查AndroidManifest.xml是否配置正确?(建议直接参考demo的例子改)

  • accessId、accessKey设置是否与前台注册的一致?
  • 相关权限是否齐全?
  • receiver、service和activity相关组件是否配置好?

3.设备是否注册成功?
4.当前APP包名是否与前台注册的一致,如果不一致请在前台选中“使用多包名”选项?
5.前台下发通知时,“时段控制”选项里的时间段是否符合终端设备当前时间?
6.2.30及以上版本请检查xml配置文件是否添加com.tencent.android.tpush.XGPushActivity相关的内容
7.停留在后台的APP点击通知不能打开APP:被打开的activity(特别是LAUNCHER)启动模式为SingleTop,SingleTask或SingleInstance,请在该activity重载onNewIntent方法:

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);// 必须要调用这句
}

8.对于使用AndriodStudio的同学,若AndroidManifest.xml编译不通过,XGPushActivity配置改为:

<action android:name="android.intent.action"/>

9.请检查AndroidManifest.xml是否已正确配置XGRemoteService,且intent-filter中是否正确设置:

<action android:name="应用包名.PUSH_ACTION"/>应用包名为当前APP包名,如com.tencent.xgdemo

10.是否已设置APP默认的icon?由于系统原因,若没有icon,通知将不能展示。
11.(2.36之前的版本)已知MIUI V6上会禁用所有静态广播,若出现有类似的情况,请添加以下代码兼容该系统。

// 在XGPushManager.registerPush(context)或其它版本的注册接口之后调用以下代码
// 使用ApplicationContext
Context context = getApplicationContext();
Intent service = new Intent(context, XGPushService.class);
context.startService(service);

12.点击通知,出现不能打开activity的情况,请在AndroidManifest.xml中将XGPushActivity的exported属性设置为true。
13.点击通知,出现重复打开APP的情况,请将被打开的Activity启动模式改为SingleTop,SingleTask或SingleInstance。

差不多就是这么多了,如果还需要更多的高级功能, 可以再仔细看看 《SDK开发指南》,其实文档已经写得很详细了,只要我们仔细阅读文档,实现我们想要的功能还是不难的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,376评论 25 707
  • 由于信鸽接入文档比较详细,这里我不对如何接入进行阐述,想知道具体如何接入可以参考信鸽帮助手册:信鸽Andr...
    懒Qin阅读 5,352评论 28 25
  • 份额对比: 首先关注厂商推送,能够保证push服务最大程度存活以保证实时触达。 小米推送 免费、到达率高、Andr...
    vv冥焰阅读 2,610评论 0 1
  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 6,694评论 10 16
  • 希望如它般灿烂开放。
    七月未月阅读 180评论 0 0