QtAndroid具体解释(6):集成信鸽推送

    推送是我们开发移动应用经经常使用到的功能,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";
    @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);
            }
        });
    }
}

    非常easy,我们从 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 应用中集成信鸽推送。就说到这里了。

有了上面介绍的知识,常规的推送通知已经木问题了,哪怕你应用退出了。也能够收到服务端推送的通知,用户点击通知栏里的消息。就能够启动你的应用哦。


  回想一下:

posted on 2016-03-26 19:20  gcczhongduan  阅读(249)  评论(0编辑  收藏  举报