1. 程式人生 > >QtAndroid詳解(6):整合信鴿推送

QtAndroid詳解(6):整合信鴿推送

    推送是我們開發移動應用經常用到的功能,Qt on Android 應用也會用到,之前也有朋友問過,這次我們來看看怎麼在 Qt on Android 應用中來整合來自騰訊的信鴿推送。

    有關信鴿的 SDK 和整合指南,請到這裡(http://xg.qq.com/)檢視。本文是參考騰訊信鴿的線上幫助完成的。信鴿的 WIKI 和文件已經做得很好了,照著做就是,這裡只講 Qt 中整合信鴿時的步驟和注意事項。

    我使用 Qt SDK 5.3.1 ,在 Windows 平臺上開發,信鴿版本 2.37 。

信鴿SDK

    這裡如何快速整合就不說了,人家說得很明白。

Qt on Android整合信鴿

    這裡是本文的重點。

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);
            }
        });
    }
}

    很簡單,我們從 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 應用中整合信鴿推送,就講到這裡了。有了上面介紹的知識,常規的推送通知已經木問題了,哪怕你應用退出了,也可以收到服務端推送的通知,使用者點選通知欄裡的訊息,就可以啟動你的應用哦。

  回顧一下: