推送是我们开发移动应用经经常使用到的功能,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 中给信鸽添加一些配置,下图供參考:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

图 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”文件夹下,如图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

图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 演示样例,看到的界面例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

图 8 xgPushDemo的丑样

图8说,我非常丑。但是我非常温和。别听它的,它就是个摆设。我们要看的是推送哦。

呐,注意到我在 QtPushDemoActivity 的 onCreate 方法里的信息打印了吗?假设你执行演示样例。应该看到相似以下的输入:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

图 9 注冊信鸽服务成功

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

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

我们这里能够看到效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

图10 推送效果

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

图11 应用列表

咦,这家伙非常懒。应用名字都木改!只是假设你想改。去看“Qt on Android 之设置应用名为中文”吧。

好咧,在 Qt on Android 应用中集成信鸽推送。就说到这里了。

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

回想一下:

QtAndroid具体解释(6):集成信鸽推送的更多相关文章

  1. android app 集成 信鸽推送

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

  2. react-native 信鸽推送集成

    目录 一. git链接: react-native-xinge-push 1.1 安装 1.2. link 二. android配置 2.1. android/settings.gradle 2.2. ...

  3. QQ信鸽推送

    闲来无事,看看腾讯的信鸽推送! 优点: 1.毕竟大腿出的东西,不会太差 2.集成快 3.推送效率高,功能强,APP后台被杀的情况下同样能接受到推送. 废话少说,直接上代码: 源代码.zip

  4. 信鸽推送 10004,os文件配置出错,解决办法

    信鸽推送注册失败 返回码 10004 是 os  配置出现问题 经过询问客服,得到以下解决办法 将SDK中的so文件复制下来 新建文件夹jniLibs,并将 so 配置文件粘贴进去 便可完成注册

  5. 信鸽推送 .NET (C#) 服务端 SDK rest api 调用库(v1.2)

    信鸽推送 .NET  服务端 SDK rest api 调用库-介绍 该版本是基于信鸽推送v2版本的时候封装的,先拿出来与大家分享,封装还还凑合,不依赖其他http调用件,唯一依赖json序列化dll ...

  6. 1、Android Studio集成极光推送(Jpush) 报错 java.lang.UnsatisfiedLinkError: cn.jpush.android.service.PushProtoco

    Android studio 集成极光推送(Jpush) (华为手机)报错, E/JPush: [JPushGlobal] Get sdk version fail![获取sdk版本失败!] W/Sy ...

  7. 信鸽推送.NET SDK 开源

    github 地址 https://github.com/yeanzhi/XinGePushSDK.NET 传送门如何安装    建议使用nuget安装包,搜索"信鸽"即可    ...

  8. Android 信鸽推送通知栏不显示推送的通知

    使用信鸽推送,却怎么也没反应.经过查看log发现确实是收到了推送过来的消息了,其中有这么一行: W/dalvikvm(23255): VFY: unable to resolve virtual me ...

  9. Swift3集成极光推送

      现在很多程序都开始使用Swift开发了,但是第三方库大多数都是用OC写的,所以我们要使用Swift和OC混编.今天的内容主要讲Swift3.0集成极光推送. 1.准备工作   集成指南,极光上说的 ...

随机推荐

  1. ThinkPHP的静态化页面方法

    原来ThinkPHP自带了生成静态页的函数buildHtml,使用起来很方便!最新的手册里没写这个方法,向大家介绍一下.     protected function buildHtml($htmlf ...

  2. C#关于log4net(Log For Net)

    1       介绍 log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java ...

  3. 【NppExec】直接在notepad++运行python的插件:NppExec

    1.下载NppExec    http://sourceforge.net/projects/npp-plugins/files/NppExec/ 2.安装   解压,全部复制到d:/program ...

  4. Web开发基础(读书笔记)

    读书笔记:简单+基础 HTML(hyper Text Markup Language,超文本标记语言) URL(Uniform Resource Locator,统一资源定位器)构成3部分:协议/主机 ...

  5. 开源的图像滤镜库----for Android

    1.GPUImage for Android(推荐使用) GPUImage基于OpenGL实现的各种各样图像滤镜(图像处理)效果,多达50多种, idea源于GPUImage for iOS,基本囊括 ...

  6. 见微知著(二):解析ctf中的pwn--怎么利用double free

    这次选2015年的0ctf的一道非常经典的pwn题,感觉这个题目作为练习题来理解堆还是很棒的. 运行起来,可以看出是一个实现类似于记事本功能的程序,就这一点而言,基本是套路了,功能都试一遍之后,就可以 ...

  7. [BZOJ5465][APIO2018]选圆圈(KD-Tree)

    题意:给你n个圆,每次选择半径最大的,将它和与它相交的圆全部删去,输出每个圆是在哪次被删的. KD树模板题.用一个矩形框住这个圆,就可以直接剪枝了.为了防止被卡可以将点旋转一个角度,为了保险还可以多转 ...

  8. [xsy2363]树

    设$f_{i,j}$表示$i$个点的树,权值为$j$且可以不选根的方案数,$g_{i,j}$表示$i$个点的树,权值为$j$且必选根的方案数 首先$g_{1,1}=0$ 我们可以把原树连上一个新的子树 ...

  9. 【二分答案】【最短路】bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线

    对于二分出的答案x而言,验证答案等价于将所有边权>x的边赋成1,否则赋成0,然后判断从1到n的最短路是否<=K. #include<cstdio> #include<cs ...

  10. 【Treap】BZOJ1588-[HNOI2002]营业额统计

    [题目大意][借用别人的概括]给出一个n个数的数列a,对于第i个元素ai定义fi=min(abs(ai-aj)),(1<=j<i),其中f1=a1.输出sum(fi) (1<=i&l ...