推送是我们开发移动应用经经常使用到的功能,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 能够在 http://xg.qq.com/ 这里下载到。
信鸽的高速集成指南:点我去看啦。
这里怎样高速集成就不说了。人家说得非常明确。
这里是本文的重点。
我创建了一个简单的 Qt QWidgets App ,项目名字是 xgPushDemo 。具体过程略去。參考《Qt on Android核心编程》或者“Qt on Android:图文具体解释Hello World全过程”。
必须创建 AndroidManifest.xml 文件。这个能够用 Qt Creator 来完毕。
创建之后,改动包名为 an.qt.xgPushDemo 。这个包名。我们在 xg.qq.com 上要用到,你在 xg 上创建应用时须要指定包名,必须和这里一致。
给你的应用指定一个图标,必须的。否则信鸽推送通知时。找不到应用图标,显示不出来。
好啦,以下是我的配置,供參考:
图 1 Qt Creator中改动AndroidManifest.xml
如图1所看到的,我改了包名。也设置了应用图标(偷信鸽demo的图标)。
接下来还要在 AndroidManifest.xml 中给信鸽添加一些配置,下图供參考:
图 2 为信鸽配置 AndroidManifest.xml
如图2所看到的,我标注了三处必须改动的地方,请注意。
另一些权限的配置,我没有列出来。直接拷贝信鸽高速集成指南里的说明就可以。
实际上我们这次要引入一个 Java 文件。定义了一个名为 QtPushDemoActivity 的类来作为我们应用的入口 Activity 。相应的,也须要改动 AndroidManifest.xml 文件。请打开 AndroidManifest.xml 文件,切换到 “XML Source” 模式直接改动。找到 <activity>标签。把 “andorid:name” 这个属性,改动为:
android:name="an.qt.xgPushDemo.QtPushDemoActivity"
信鸽 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 子文件夹,自己建一个就可以。
信鸽除了 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。这个动作要在 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"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context ctx = getApplicationContext(); XGPushManager.registerPush(ctx, new XGIOperateCallback() { @Override public void onSuccess(Object o, int i) { Log.e(TAG, "register ok, token - " + o); } @Override public void onFail(Object o, int i, String s) { Log.e(TAG, "register failed, code - " + i + " message - " + s); } }); } }
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 应用中集成信鸽推送。就说到这里了。
有了上面介绍的知识,常规的推送通知已经木问题了,哪怕你应用退出了。也能够收到服务端推送的通知,用户点击通知栏里的消息。就能够启动你的应用哦。
回想一下: