推送是我们开发移动应用经常用到的功能,Qt on Android 应用也会用到,之前也有朋友问过,这次我们来看看怎么在 Qt on Android 应用中来集成来自腾讯的信鸽推送。

有关信鸽的 SDK 和集成指南,请到这里(http://xg.qq.com/)查看。本文是参考腾讯信鸽的在线帮助完成的。信鸽的 WIKI 和文档已经做得很好了,照着做就是,这里只讲 Qt 中集成信鸽时的步骤和注意事项。

这次我们要写一点点 Java 代码,就几行,如何做,可以参考《Qt on Android核心编程》一书,也可以参考我博客上的文章“Qt on Android:使用JNI与第三方jar包”。下面我就开讲了。

我使用 Qt SDK 5.3.1 ,在 Windows 平台上开发,信鸽版本 2.37 。

信鸽SDK

信鸽的 SDK 可以在 http://xg.qq.com/ 这里下载到。

信鸽的快速集成指南:点我去看啦。

这里如何快速集成就不说了,人家说得很明白。

Qt on Android集成信鸽

这里是本文的重点。

我创建了一个简单的 Qt QWidgets App ,项目名字是 xgPushDemo ,具体过程略去,参考《Qt on Android核心编程》或者“Qt on Android:图文详解Hello World全过程”。

AndroidManifest.xml

必须创建 AndroidManifest.xml 文件,这个可以用 Qt Creator 来完成。

包名与图标

创建之后,修改包名为 an.qt.xgPushDemo 。这个包名,我们在 xg.qq.com 上要用到,你在 xg 上创建应用时需要指定包名,必须和这里一致。

给你的应用指定一个图标,必须的,否则信鸽推送通知时,找不到应用图标,显示不出来。

好啦,下面是我的配置,供参考:

图 1 Qt Creator中修改AndroidManifest.xml

如图1所示,我改了包名,也设置了应用图标(偷信鸽demo的图标)。

信鸽的配置

接下来还要在 AndroidManifest.xml 中给信鸽增加一些配置,下图供参考:

图 2 为信鸽配置 AndroidManifest.xml

如图2所示,我标注了三处必须修改的地方,请注意。

还有一些权限的配置,我没有列出来,直接拷贝信鸽快速集成指南里的说明即可。

Actvitiy配置

实际上我们这次要引入一个 Java 文件,定义了一个名为 QtPushDemoActivity 的类来作为我们应用的入口 Activity 。对应的,也需要修改 AndroidManifest.xml 文件。请打开 AndroidManifest.xml 文件,切换到 “XML Source” 模式直接修改,找到 <activity>标签,把 “andorid:name” 这个属性,修改为:

android:name="an.qt.xgPushDemo.QtPushDemoActivity"

嗯,就这样,原来是 QtActivity ,使用 Qt 提供的 Activity 作为应用入口,我们修改为 QtPushDemoActivity 这个我们自己写的 Activity ,后面会讲到。

信鸽SDK的jar文件

信鸽 SDK 解压后,打开 “Xg-Push-SDK-Android-2.37\Xg-Push-SDK-Android\libs” 目录。如下图:

图3 信鸽SDK里的jar文件

我用红线标注的三个 jar 文件,必须要拷贝到我们的项目目录下。

android-support-v4.jar也拷贝一下。

我们创建了 AndroidManifest.xml 后,在项目根目录下会生成名为 Android 的文件夹,jar文件请拷贝到 android/libs 目录下。如下图所示:

图4 Qt项目目录下的jar文件

注意,Qt项目下的android目录内,默认没有 libs 子目录,自己建一个即可。

信鸽so文件

信鸽除了 jar 文件,还有两个 so 文件,必须要拷贝到Qt项目目录下。

so在“Xg-Push-SDK-Android-2.37\Xg-Push-SDK-Android\All-Platforms-SO”目录下,如图:

图5 信鸽so文件

如图5所示,直接把 armeabi 和 armeabi-v7a 都拷贝到 Qt 项目目录下。拷贝完成后如下图所示:

图6 Qt项目下的libs目录

好啦,集成信鸽SDK需要的文件就搞完了。关于 jar 、 so 等文件,我们只要按照这种目录结构放在那里,Qt Creator在编译、部署时就会把它们打包到APK中,而我们在 Java 代码中也可以直接访问它们。

注册service

要使用信鸽,必须在你的应用启动后注册service。这个动作要在 Java 代码中完成。

还记得我们的包名——“an.qt.xgPushDemo”——吗?进入项目目录下的 android 文件下,建立 “src\an\qt\xgPushDemo” 这样的目录层次,新建一个 QtPushDemoActivity.java文件。然后目录看上去是酱紫的:

图7 添加java文件

如图7所示,我们添加了一个QtPushDemoActivity.java文件。Java 源文件名和类名是必须一致的,所以,我们这里的 Activity 名字就是 QtPushDemoActivity ,而 src 文件夹内的目录结构,和包名又是一致的,“an/qt/xgPushDemo”对应 Java 代码里的包名为“an.qt.xgPushDemo”,就是我们之前修改 AndroidManifest.xml 时定的那个包名。

好啦,来看 QtPushDemoActivity.java 的内容:

package an.qt.xgPushDemo;import org.qtproject.qt5.android.bindings.QtActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.tencent.android.tpush.XGIOperateCallback;
import com.tencent.android.tpush.XGPushConfig;
import com.tencent.android.tpush.XGPushManager;public class QtPushDemoActivity extends QtActivity {private final static String TAG = "xgPushDemo";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Context ctx = getApplicationContext();XGPushManager.registerPush(ctx, new XGIOperateCallback() {@Overridepublic void onSuccess(Object o, int i) {Log.e(TAG, "register ok, token - " + o);}@Overridepublic void onFail(Object o, int i, String s) {Log.e(TAG, "register failed, code - " + i + " message - " + s);}});}
}

很简单,我们从 QtActivity 继承,重写了 onCreate 方法,加入注册信鸽服务的代码。

Qt on Android 应用可以直接集成 java 代码,只要把代码放到与包名对应的目录结构下即可,无需在 pro 文件内做任何改动。

这里需要提一下,作为 Qt on Android 应用入口的 Activity,必须从 QtActivity 继承,这是因为 QtActivity 这个类完成了从 Java 过渡到 Qt 的动作,不用它,我们的 Qt 世界就无法呈现出来。关于这一点,具体的分析,请看《Qt on Android核心编程》的第13章——“Qt on Android揭秘”。

好啦,现在一切就绪,我们可以跑跑看喽。

运行效果

如果你运行 xgPushDemo 示例,看到的界面如下:

图 8 xgPushDemo的丑样

图8说,我很丑,可是我很温柔,别听它的,它就是个摆设。我们要看的是推送哦。

呐,注意到我在 QtPushDemoActivity 的 onCreate 方法里的打印信息了吗?如果你运行示例,应该看到类似下面的输入:

图 9 注册信鸽服务成功

看到图9的信息,说明我们注册信鸽服务成功了!天才第一步,雀氏纸尿裤。哦,太激动了,现在用不着纸尿裤了。接下来就可以登录 xg.qq.com ,给应用推送通知了。

怎么登录?怎么推送?亲,信鸽的快速集成指南:点我去看啦。

我们这里可以看到效果如下:

图10 推送效果

嘿嘿,看到通知消息前面有个图标了吧,那是我偷信鸽Demo的,应用列表里也有呢,你看:

图11 应用列表

咦,这家伙很懒,应用名字都木改!不过如果你想改,去看“Qt on Android 之设置应用名为中文”吧。

好咧,在 Qt on Android 应用中集成信鸽推送,就讲到这里了。有了上面介绍的知识,常规的推送通知已经木问题了,哪怕你应用退出了,也可以收到服务端推送的通知,用户点击通知栏里的消息,就可以启动你的应用哦。

回顾一下:

  • QtAndroid详解(5):JNI调用Android系统功能(2)
  • QtAndroid详解(4):JNI调用Android系统功能(1)
  • QtAndroid详解(3):startActivity实战Android拍照功能
  • QtAndroid详解(2):startActivity和它的小伙伴们
  • QtAndroid详解(1):QAndroidJniObject
  • Qt on Android专栏

QtAndroid详解(6):集成信鸽推送相关推荐

  1. Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

    Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...

  2. java服务端集成信鸽推送

    java服务端集成信鸽推送 最近项目需要集成推送功能,突发奇想的选了信鸽推送(可能是最近一直在用阿里的东西),没想到这坑不是一般的多,而且关于详细的集成案例,度娘上真是没一个能入眼的.算了,别的不多说 ...

  3. android app 集成 信鸽推送

    推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客, ...

  4. java后台与android端集成信鸽推送和华为推送通道

    时间比较紧,并未调试. 需求:后端可以针对指定账号或者列表进行通知栏信息推送,优先使用华为通道.点击通知栏消息打开指定activity 后端版本V3,android sdk 3.2.7 一.后端部分代 ...

  5. 详解APNS苹果消息推送通知

    苹果消息通知什么? 如下图如示 就是APP的服务端在用户未打开APP进程时,还能发通知给用户APP的服务技术 相关概念 Provider:提供推送的第三方服务系统 Device:苹果设备,例如ipho ...

  6. android 信鸽 自动重启,Android简单集成信鸽推送

    添加项目的buid.gradle ndk { //选择要添加的对应cpu类型的.so库 abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a' // 还可以添 ...

  7. 信鸽推送-10005错误

    关于集成信鸽推送-10005的错误见文章 "信鸽推送注册失败的一般情况" https://segmentfault.com/a/11...

  8. 利用信鸽推送实现Android登录后强制退出的功能(单点登录)

    首先整理思路,先思考实现逻辑: 1.集成信鸽推送 2.实现自定义推送 3.在自定义推送中,接收推送的方法内启动强制退出功能. 思路逻辑很简单,但是实现起来就得一步一步做,先集成信鸽: 这里主要是参考官 ...

  9. Android开发之第三方推送JPush极光推送知识点详解 学会集成第三方SDK推送

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 下面是一些知识点介绍,后期将会带领大家进行代码实战: 一.Android实现推送方式解决方案: 1.推 ...

  10. 腾讯信鸽推送平台集成中的问题

    2016/03/11// ///by xbw/ //eclipse 信鸽sdk v2.42// 好久没来写csdn博客了,因为开了个小站,在此宣传一下吧,xbwcc.com.cn 在最近做的app中出 ...

最新文章

  1. 一分钟学会使用RichEdit控件
  2. java main test_java调用main自动执行testng方法一
  3. python中、变量指向的对象可以发生变化吗_python中的引用传递,可变对象,不可变对象,list注意点...
  4. Maven:基本使用
  5. 要求两个给定正整数的最大公约数和最小公倍数。_最小公倍数的求法,最大公因数要你有什么用...
  6. APP天气预报界面设计灵感
  7. iOS中网络请求的使用(GET请求与POST请求)
  8. sip消息类型和消息代码详解-转
  9. python编程新手常犯的错误_初学者开发人员都会犯的7个Python错误
  10. 备考2022年软考论文写作注意要点
  11. weblogic部署静态资源文件html,weblogic部署静态html
  12. SMA(简单移动平均线)
  13. 【Life】 Never Too Late, Just Do it Better!
  14. ZOJ - 3939
  15. HLS 开发学习(五) 稀疏矩阵向量乘法
  16. 三层交换机实现vlan间通信
  17. HTTPSConnectionPool(host=‘finance.yahoo.com‘, port=443解决方案
  18. js判断当前电脑是否安装flash插件
  19. 闪动的文字图片怎么制作?教你一招闪图在线制作
  20. 强制性养老机构安全规范2022年实行

热门文章

  1. Error response from daemon: removal of container XXX is already in progress
  2. 计算机编程导论python程序设计答案-计算机科学与Python编程导论_学堂云答案
  3. android 五种存储方式,android数据五种存储
  4. 独家|一文读懂优化算法
  5. Linux 生成so库文件并调用
  6. [日推荐]『51好书推荐』专治假期综合症~
  7. 阿里巴巴入选的JCP最高执行委员会,何方神圣?
  8. 地理信息系统(GIS)的发展历程
  9. 供应链金融业务基础模式、实施路径、服务对象深度解析
  10. 大数据与云计算有什么关系?