推送是我们开发移动应用经经常使用到的功能,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. 【互动问答分享】第11期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    Q1:docker成熟度如何? Docker是2013年和2014年最火爆的云计算开源项目: Baidu公司是中国使用Docker最为深入和最大规模的公司,线上稳定运行数十万个Docker容器,目前已 ...

  2. windows8 使用docker创建第一个nodejs运行环境

    现在公司电脑使用的是windows8操作系统,如果想要运行docker,只能安装Docker ToolBox 关于安装Docker ToolBox,请查看文章<windows8安装docker( ...

  3. 【转-记】mysql总结

    1 | 查询所有数据  select * from Info 查所有数据 select Code,Name from Info 查特定列    2 | 根据条件查  select * from Inf ...

  4. [win7] 带网络的安全模式,启动QQEIMPlatform第三方服务

    REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\SafeBoot\Network\QQEIMPlatform" /VE /T REG_ ...

  5. SnowNLP:一个处理中文文本的 Python 类库[转]

    SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和Te ...

  6. Spring Cloud 常用依赖

    <!-- 将微服务provider侧注册进eureka --> <dependency> <groupId>org.springframework.cloud< ...

  7. 训练指南 UVALive - 5713(最小生成树 + 次小生成树)

    layout: post title: 训练指南 UVALive - 5713(最小生成树 + 次小生成树) author: "luowentaoaa" catalog: true ...

  8. small test on 5.30 night T2

    (题面写错了,应该是一条从b -> a 的边) 让我们设状态 (a,b,c) 表示存在一个点k,使得  dist(k,b) - dist(k,a) * 2 + 3 = c,显然这里的第三维可以压 ...

  9. Codeforces 915 G Coprime Arrays

    Discipntion Let's call an array a of size n coprime iff gcd(a1, a2, ..., an) = 1, where gcd is the g ...

  10. 将SeqReader打包成可执行的jar包

    SeqReader是我定义的一个读取SequenceFile文件,并将部分(key,value)打印到控制台窗口的类,其完整代码如下: /** * Created with IntelliJ IDEA ...