app消息推送接入流程
在制作或者上线一款app的时候,基本需要接入消息推送sdk。如果自己写底层的消息推送,研发成本比较高,而且搞不好会经常漏消息。所以必须要接入比较成熟的sdk。
在国内成熟并且稳定的消息推送sdk,我建议你选择腾讯云消息推送SDK。
像我们常见的app,微信,QQ都是接入腾讯云消息推送sdk的。
那么接下来我来系统的讲解一下如何接入腾讯云消息推送sdk。
1,注册腾讯云账户
联系我可以获取腾讯云额外折扣:http://wo.ccusoft.com
2,注册好去购买腾讯云消息推送套餐
选择接入点,推送次数。
3,接入腾讯云消息推送sdk
Android SDK 是移动推送 TPNS 服务为客户端实现消息推送而提供给开发者的接口,本文将提供 AndroidStudio Gradle 自动集成和 Android Studio 手动集成两种方式。
SDK 集成(二选一)
AndroidStudio Gradle 自动集成
操作步骤
注意:
在配置 SDK 前,确保已创建 Android 平台的应用。
- 登录 移动推送 TPNS 控制台,在【产品管理】>【配置管理】页面获取应用的 AccessID、AccessKey。
- 在 SDK 下载 页面,获取当前最新版本号。
- 在 app build.gradle 文件下,配置以下内容:
android {......defaultConfig {//控制台上注册的包名.注意application ID 和当前的应用包名以及控制台上注册应用的包名必须一致。applicationId "您的包名"......ndk {//根据需要 自行选择添加的对应cpu类型的.so库。abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'}manifestPlaceholders = [XG_ACCESS_ID : "注册应用的accessid",XG_ACCESS_KEY : "注册应用的accesskey",]......}......
}
dependencies {......//添加以下依赖implementation 'com.tencent.jg:jg:1.1' implementation 'com.tencent.tpns:tpns:[VERSION]-release' // TPNS 推送 [VERSION] 为最新 SDK 版本号,即为上述步骤2获取的版本号
}
注意:
- 如果您的应用服务接入点为广州,SDK 默认实现该配置。
- 如果您的应用服务接入点为上海、新加坡或中国香港,请按照下文步骤完成其他服务接入点域名配置。
在 AndroidManifest 文件 application 标签内添加以下元数据:
<application>
// 其他安卓组件
<meta-dataandroid:name="XG_SERVER_SUFFIX"android:value="其他服务接入点域名" />
</application>
其他服务接入点域名如下:
- 上海:
tpns.sh.tencent.com
- 新加坡:
tpns.sgp.tencent.com
- 中国香港:
tpns.hk.tencent.com
注意事项
- 如在添加以上 abiFilter 配置后, Android Studio 出现以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin,则在 Project 根目录的 gradle.properties 文件中添加android.useDeprecatedNdk=true
。 - 如需监听消息请参考 XGPushBaseReceiver 接口或 Demo(在 SDK 压缩包内,可前往 SDK 下载 页面获取 )的 MessageReceiver 类。自行继承 XGPushBaseReceiver 并且在配置文件中配置如下内容(请勿在 receiver 里处理耗时操作):
<receiver android:name="com.tencent.android.xg.cloud.demo.MessageReceiver"> <intent-filter><!-- 接收消息透传 --><action android:name="com.tencent.android.xg.vip.action.PUSH_MESSAGE" /><!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 --><action android:name="com.tencent.android.xg.vip.action.FEEDBACK" /> </intent-filter> </receiver>
- 如需兼容 Android P,需要添加使用 Apache HTTP client 库,在 AndroidManifest 的 application 节点内添加以下配置即可。
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
Android Studio 手动集成
前往 SDK 下载 页面获取最新版 SDK,并参考以下步骤将 SDK 导入到您的 Android 工程中。
工程配置
将 SDK 导入到工程的步骤为:
- 创建或打开 Android 工程。
- 将移动推送 TPNS SDK 目录下的 libs 目录所有 .jar 文件拷贝到工程的 libs(或 lib)目录下。
- .so 文件是移动推送 TPNS 必须的组件,支持 armeabi、armeabi-v7a、arm64-v8a、mips、mips64、x86、x86_64平台,请根据自己当前 .so 支持的平台添加
- 打开 AndroidManifest.xml,添加以下配置(建议参考下载包 Demo 中的 Merged Manifest 修改),其中 “APP的AccessId ” 和 “APP的AccessKey” 替换为 App 对应的 AccessId 和 AccessKey,请确保按照要求配置,否则可能导致服务不能正常使用。
权限配置
移动推送 TPNS SDK 正常运行所需要的权限。示例代码如下:
<!-- 【必须】 移动推送 TPNS SDK VIP版本所需权限 -->
<permission
android:name="应用包名.permission.XGPUSH_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="应用包名.permission.XGPUSH_RECEIVE" />
<!-- 【必须】 移动推送 TPNS SDK 所需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 【常用】 移动推送 TPNS SDK所需权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
权限 | 是否必选 | 说明 |
---|---|---|
android.permission.INTERNET | 必选 | 允许程序访问网络连接,可能产生 GPRS 流量 |
android.permission.ACCESS_WIFI_STATE | 必选 | 允许程序获取当前 Wi-Fi 接入的状态以及 WLAN 热点的信息 |
android.permission.ACCESS_NETWORK_STATE | 必选 | 允许程序获取网络信息状态 |
android.permission.WAKE_LOCK | 可选 | 允许程序在手机屏幕关闭后,后台进程仍然运行 |
android.permission.VIBRATE | 可选 | 允许应用震动 |
android.permission.READ_PHONE_STATE | 可选 | 允许应用访问手机状态 |
android.permission.RECEIVE_USER_PRESENT | 可选 | 允许应用可以接收点亮屏幕或解锁广播 |
android.permission.WRITE_EXTERNAL_STORAGE | 可选 | 允许程序写入外部存储 |
android.permission.RESTART_PACKAGES | 可选 | 允许程序结束任务 |
android.permission.GET_TASKS | 可选 | 允许程序获取任务信息 |
组件和应用信息配置
注意:
TPNS Android SDK 1.1.6.3 及之前版本请参考文档 1.1.6.3 及之前版本组件和应用信息配置 。
<application><!-- 应用的其它配置 --><uses-library android:name="org.apache.http.legacy" android:required="false"/> <!-- 【必须】 移动推送 TPNS 默认通知 --><activity android:name="com.tencent.android.tpush.TpnsActivity"android:theme="@android:style/Theme.Translucent.NoTitleBar"><intent-filter><dataandroid:scheme="tpns"android:host="应用包名"/><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.BROWSABLE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity><!-- 【必须】 移动推送 TPNS receiver广播接收 --><receiverandroid:name="com.tencent.android.tpush.XGPushReceiver"android:process=":xg_vip_service"><intent-filter android:priority="0x7fffffff"><!-- 【必须】 移动推送 TPNS SDK的内部广播 --><action android:name="com.tencent.android.xg.vip.action.SDK" /><action android:name="com.tencent.android.xg.vip.action.INTERNAL_PUSH_MESSAGE" /><action android:name="com.tencent.android.xg.vip.action.ACTION_SDK_KEEPALIVE" /><!-- 【可选】 系统广播:网络切换 --><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /><!-- 【可选】 系统广播:开屏 --><action android:name="android.intent.action.USER_PRESENT" /><!-- 【可选】 一些常用的系统广播,增强移动推送 TPNS service的复活机会,请根据需要选择。当然,您也可以添加App自定义的一些广播让启动service --><action android:name="android.bluetooth.adapter.action.STATE_CHANGED" /><action android:name="android.intent.action.ACTION_POWER_CONNECTED" /><action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" /></intent-filter></receiver><!-- 【必须】移动推送 TPNS service --><serviceandroid:name="com.tencent.android.tpush.service.XGVipPushService"android:persistent="true"android:process=":xg_vip_service"></service><!-- 【必须】通知 service ,android:name 部分改为包名.XGVIP_PUSH_ACTION --><service android:name="com.tencent.android.tpush.rpc.XGRemoteService"android:exported="false"><intent-filter><!-- 【必须】请修改为当前APP名包.XGVIP_PUSH_ACTION --><action android:name="应用包名.XGVIP_PUSH_ACTION" /></intent-filter></service><!-- 【必须】【注意】authorities 修改为包名.XGVIP_PUSH_AUTH --><providerandroid:name="com.tencent.android.tpush.XGPushProvider"android:authorities="应用包名.XGVIP_PUSH_AUTH" /><!-- 【必须】【注意】authorities 修改为包名.TPUSH_PROVIDER --><providerandroid:name="com.tencent.android.tpush.SettingsContentProvider"android:authorities="应用包名.TPUSH_PROVIDER" /><!-- 【可选】用于增强保活能力 --><providerandroid:name="com.tencent.android.tpush.XGVipPushKAProvider"android:authorities="应用包名.AUTH_XGPUSH_KEEPALIVE"android:exported="true" /><!-- 【可选】APP实现的Receiver,用于接收消息透传和操作结果的回调,请根据需要添加 --><!-- YOUR_PACKAGE_PATH.CustomPushReceiver需要改为自己的Receiver: --><receiver android:name="应用包名.MessageReceiver"><intent-filter><!-- 接收消息透传 --><action android:name="com.tencent.android.xg.vip.action.PUSH_MESSAGE" /><!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 --><action android:name="com.tencent.android.xg.vip.action.FEEDBACK" /></intent-filter></receiver><!-- MQTT START --><service android:exported="false"android:process=":xg_vip_service"android:name="com.tencent.tpns.mqttchannel.services.MqttService" />
<providerandroid:exported="false"android:name="com.tencent.tpns.baseapi.base.SettingsContentProvider"android:authorities="应用包名.XG_SETTINGS_PROVIDER" /><!-- MQTT END--><!-- 【必须】 请修改为 APP 的 AccessId,“15”开头的10位数字,中间没空格 --><meta-dataandroid:name="XG_V2_ACCESS_ID"android:value="APP的AccessId" /><!-- 【必须】 请修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 --><meta-dataandroid:name="XG_V2_ACCESS_KEY"android:value="APP的AccessKey" />
</application>
<!-- 【必须】 移动推送 TPNS SDK 5.0版本所需权限 -->
<permissionandroid:name="应用包名.permission.XGPUSH_RECEIVE"android:protectionLevel="signature" />
<uses-permission android:name="应用包名.permission.XGPUSH_RECEIVE" />
<!-- 【必须】 移动推送 TPNS SDK所需权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 【常用】 移动推送 TPNS SDK所需权限 -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注意:
- 如果您的应用服务接入点为广州,SDK 默认实现该配置。
- 如果您的应用服务接入点为上海、新加坡或中国香港,请按照下文步骤完成其他服务接入点域名配置。
在 AndroidManifest 文件 application 标签内添加以下元数据:
<application>
// 其他安卓组件
<meta-dataandroid:name="XG_SERVER_SUFFIX"android:value="其他服务接入点域名" />
</application>
其他服务接入点域名如下:
- 上海:
tpns.sh.tencent.com
- 新加坡:
tpns.sgp.tencent.com
- 中国香港:
tpns.hk.tencent.com
调试及设备注册
开启 Debug 日志数据
注意:
上线时请设置为 false。
XGPushConfig.enableDebug(this,true);
Token 注册
XGPushManager.registerPush(this, new XGIOperateCallback() {@Overridepublic void onSuccess(Object data, int flag) {//token在设备卸载重装的时候有可能会变Log.d("TPush", "注册成功,设备token为:" + data);}@Overridepublic void onFail(Object data, int errCode, String msg) {Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg);}
});
过滤 "TPush" 注册成功的日志如下:
TPNS register push success with token : 6ed8af8d7b18049d9fed116a9db9c71ab44d5565
代码混淆
如果您的项目中使用 proguard 等工具,已做代码混淆,请保留以下选项,否则将导致移动推送 TPNS 服务不可用:
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.tencent.android.tpush.** {*;}
-keep class com.tencent.tpns.baseapi.** {*;}
-keep class com.tencent.tpns.mqttchannel.** {*;}
-keep class com.tencent.tpns.dataacquisition.** {*;}
-keep class com.tencent.bigdata.baseapi.** {*;} // 1.2.0.1 及以上版本不需要此条配置
-keep class com.tencent.bigdata.mqttchannel.** {*;} // 1.2.0.1 及以上版本不需要此条配置
注意:
如果 TPNS SDK 被包含在 App 的公共 SDK 里,即使公共 SDK 有增加配置混淆规则,主工程 App 也必须要同时增加配置混淆规则。
高级配置(可选)
音视频富媒体使用方法
- 在 App 的 layout 目录下,新建一个 xml 文件,命名为 xg_notification。
- 复制以下代码到文件中:
<?xml version="1.0" encoding="UTF-8"?>
-<RelativeLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/xg_root_view" xmlns:android="http://schemas.android.com/apk/res/android">
<!--通知的背景,id名字不能改变,其他可变-->
<ImageView android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/xg_notification_bg" android:scaleType="centerCrop"/>
<!--通知的大图标,id名字不能改变,其他可变.必须-->
<ImageView android:layout_height="48dp" android:layout_width="48dp" android:id="@+id/xg_notification_icon" android:scaleType="centerInside" android:layout_marginLeft="5dp" android:layout_centerVertical="true" android:layout_alignParentLeft="true"/>
<!--通知的时间,id名字不能改变,其他可变.若不显示时间可以去掉此布局-->
<TextView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/xg_notification_date" android:textSize="12dp" android:layout_marginRight="5dp" android:layout_marginTop="5dp" android:layout_alignParentRight="true" android:layout_alignParentTop="true"/>
<!--通知的标题,id名字不能改变,其他可变。必须-->
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/xg_notification_style_title" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:singleLine="true" android:layout_toRightOf="@id/xg_notification_icon" android:layout_toLeftOf="@id/xg_notification_date"/>
<!--通知的内容,id名字不能改变,其他可变。必须-->
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/xg_notification_style_content" android:layout_marginTop="1dp" android:singleLine="true" android:layout_toLeftOf="@id/xg_notification_date" android:layout_alignLeft="@+id/xg_notification_style_title" android:layout_below="@+id/xg_notification_style_title"/>
<!--带音频的富媒体通知的音频播放按钮,id名字不能改变,其他可变。若没用到音频富媒体可以去掉此布局-->
<ImageView android:layout_height="25dp" android:layout_width="25dp" android:id="@+id/xg_notification_audio_play" android:layout_alignLeft="@+id/xg_notification_style_title" android:visibility="gone" android:background="@android:drawable/ic_media_play" android:layout_alignParentBottom="true"/>
<!--带音频的富媒体通知的音频停止播放按钮,id名字不能改变,其他可变.若没用到音频富媒体可以去掉此布局-->
<ImageView android:layout_height="25dp" android:layout_width="25dp" android:id="@+id/xg_notification_audio_stop" android:layout_marginLeft="30dp" android:layout_toRightOf="@+id/xg_notification_audio_play" android:visibility="gone" android:background="@android:drawable/ic_media_pause" android:layout_alignParentBottom="true"/></RelativeLayout>
关闭联合保活
如需关闭联合保活功能,请在应用初始化的时候,例如 Application 或 LauncherActivity 的 onCreate 中调用如下接口,并传递 false 值:
注意:
仅 1.1.6.0 之后版本支持关闭联合保活功能,1.1.6.0之前版本TPNS 默认开启联合保活能力,且不可关闭。
XGPushConfig.enablePullUpOtherApp(Context context, boolean pullUp);
若您使用 gradle 自动集成方式,请在自身应用的 AndroidManifest.xml 文件 <application> 标签下配置如下结点,其中 xxx
为任意自定义名称;如果使用手动集成方式,请修改如下节点属性:
<!-- 在自身应用的AndroidManifest.xml文件中添加如下结点,其中 xxx 为任意自定义名称: -->
<!-- 关闭与 TPNS 应用的联合保活功能,请配置 -->
<providerandroid:name="com.tencent.android.tpush.XGPushProvider"tools:replace="android:authorities"android:authorities="应用包名.xxx.XGVIP_PUSH_AUTH"android:exported="false" />
若控制台有以下日志打印,则表明联合保活功能已经关闭:I/TPush: [ServiceUtil] disable pull up other app
。
获取 TPNS Token 交互建议
建议您完成 SDK 集成后,在 App 的【关于】、【意见反馈】等比较不常用的 UI 中,通过手势或者其他方式显示 TPNS Token,控制台和 Restful API 推送需要根据 TPNS Token 进行 Token 推送,后续问题排查也需要根据 TPNS Token 进行定位。
示例代码如下:
//获取 Token
XGPushConfig.getToken(getApplicationContext());
app消息推送接入流程相关推荐
- 如何构建一套高可用的 APP 消息推送平台
转载自 如何构建一套高可用的 APP 消息推送平台 消息推送作为移动 APP 运营中的一项关键技术,已经被越来越广泛的运用.本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行 ...
- IOS开发之实现App消息推送(最新)
IOS开发之实现App消息推送(最新) 标签: 推送最新AppStoreXCode6ios开发 2014-11-19 21:13 58412人阅读 评论(77) 收藏 举报 分类: IOS ...
- 国内APP消息推送机制以及微信消息延迟问题剖析
转自:https://club.huawei.com/thread-15878044-1-1.html 一.前言 随着安卓手机以及QQ/微信/支付宝/滴滴出行/美图外卖等一大批移动通信/移动消费应用的 ...
- app消息推送服务器端,系统服务:APP消息推送服务
APP消息推送服务开通方法 在云表官网-管理控制台中,选择要开通APP消息推送服务的服务器,然后选择要开通APP消息推送服务的应用空间,点击对应应用空间的"应用空间管理". 在进入 ...
- 微信小程序使用微信公众号的模板消息进行消息推送开发流程
微信小程序使用微信公众号的模板消息进行消息推送开发流程 微信公众号服务号,微信公众号订阅号,微信公众号开发者平台,微信小程序 这些的账号都是独立的不能共用 微信开放平台开发者资质认证审核费用为300元 ...
- 前端基于uniapp[uniPush]实现APP消息推送(安卓、IOS)
前提概述:此文章都是基于uniapp中uniPush2实现的在线.离线推送 app消息推送流程 登录开发者中心先填写好项目信息以及配置厂商 在manifest.json文件中勾选推送模块 打包自定义基 ...
- APP消息推送测试点
APP消息推送测试点 2019.03.15 17:38:39 字数 190 阅读 50 消息推送对象 1.单个推送 2.多个推送 3.及安卓和IOS渠道推送 ps: 注意生产环境和测试环境的分开,避免 ...
- 利用MUI+个推实现APP消息推送
利用MUI+个推实现APP消息推送 从2015年7月开始使用MUI进行APP的开发,到现在已经有一个年头了.而以前做过的东西都没有整理过,以后会将自己遇到的坑整理下来. 这篇主要是讲利用MUI和集成的 ...
- php实现app消息推送
如何用php实现APP消息推送 现在有很多的消息推送厂商,比如阿里云的消息推送,极光推送,融云的消息推送.他们的原理都是把sdk内置在app里面,达到消息推送的目的,通过一张图来了解一下,看不懂不要紧 ...
- 阿里云APP消息推送中间件使用
1.所需jar包 建议使用较新版本,项目一开始使用低版本时,有出现推送失败的情况 <dependency><groupId>com.aliyun</groupId> ...
最新文章
- F#创建者Don Syme谈F#设计原则
- 为什么每个函数都要测试
- C#控件 Datagriview控件
- 解题报告 keke 的房子
- 使用 PyTorch 数据读取,JAX 框架来训练一个简单的神经网络
- (50)System Verilog类静态变量实例
- jQuery Mobile中可折叠块collapsed的data-*选项
- Android EditText的常用技巧
- python撤销_python 取消转义字符作用
- c语言system.h头文件下载,c语言头文件大全
- 阿辉DirectX 11学习笔记一
- 知识分享!什么是中继器?-道合顺大数据Infinigo
- 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手
- postgreSQL 获取当前连接的IP
- 路由器DNS被劫持 解决办法、dns 被劫持怎么解决
- 英文学习20180621
- Android VLc编译
- python 数列筛选_对numpy中的数组条件筛选功能详解
- php 微信支付时 自定义的商户订单号 与 商户支付后台 查询到的不一样 的坑
- Coolpad7296线刷/救砖(win8.1) 总结