tencent cloud

移动推送

产品动态
公告
产品功能动态
Android SDK 发布动态
iOS SDK 发布动态
macOS SDK 发布动态
产品简介
产品概述
产品优势
应用场景
全球化部署
购买指南
价格总览
购买指引
计费模式
免费试用
欠费说明
快速入门
创建产品和应用
Android 快速接入
iOS 快速接入
创建推送任务
查询推送记录
推送测试方法指引
产品限制说明
操作指南
推送管理
推送高级功能
实践教程
iOS 平台角标功能实践
API 文档
简介
API 概览
调用方式
推送相关接口
标签相关接口
账号相关接口
统计相关接口
用户属性相关接口
服务端错误码
服务端 SDK
API(Java)
SDK 文档
Android 接入指南
iOS 接入指南
客户端集成插件
macOS接入指南
用户及权限
快速入门配置
进阶自定义配置
资源标签
服务协议
服务等级协议
开发者协议
常见问题
iOS 常见问题
Android 常见问题
Flutter 常见问题
其他问题
移动推送政策
移动推送隐私协议
TPNS 数据处理和安全协议
Developer Agreement
联系我们
词汇表

通知点击跳转

PDF
聚焦模式
字号
最后更新时间: 2024-01-16 17:34:39

使用场景

当订阅者点击您的通知时,可以根据您的配置跳转至指定的应用内页面、H5、Deeplink 等,来满足您在不同场景下的需求。

适用范围

平台
支持类型
Android
Intent 方式跳转:点击通知可以跳转至指定应用内页面,并且可以携带自定义参数
打开应用:点击通知可以直接进入 App 主页面
URL:点击通知可以打开浏览器进入指定的网页
应用内 Activity:点击通知可以跳转至指定应用内页面
iOS
点击通知默认是打开 App
根据下发的自定义 key 和 value 来做相应业务逻辑

Android 使用

注意:
SDK 点击消息默认支持点击事件,触发后打开目标界面,如果在 onNotifactionClickedResult 设置跳转操作会与管理台/ API 中指定的自定义跳转冲突,导致自定义的跳转失效。

SDK 配置

如果使用 Intent 方式跳转,请首先在客户端 App 的 AndroidManifest 文件内,配置需要跳转的页面:
如需跳转 AboutActivity 指定页面,示例代码如下:
<activity
android:name="com.qq.xg.AboutActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >

<!-- 其他 intent-filter -->
<!-- <intent-filter> ... </intent-filter> -->

<!-- AndroidManifest 支持为一个安卓组件配置多个 intent-filter,请将自定义跳转配置添加在单独 intent-filter 内 -->
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<!-- 自定义 data 块内容以指定您的完整 scheme -->
<!-- 按照您的配置,将会组成形如"语义名://主机名/路径名"的 url 标识 -->
<!-- 建议使用带有 app 名称、包名等可以唯一标记应用的字段进行配置,防止和其他应用的跳转目标页面冲突 -->
<data
android:scheme="语义名"
android:host="主机名"
android:path="/路径名" />
</intent-filter>
</activity>

控制台使用

使用 Intent 方式跳转(推荐)

使用 移动推送控制台 设置 Intent 进行跳转,在推送任务 > 新建推送 > 高级设置 > 点击打开中填写如下:




打开应用

控制台推送默认是选择打开应用。

跳转至 URL

使用 移动推送控制台 设置 URL 进行跳转,在高级设置 > 点击打开中填写如下:




跳转至应用内 Activity

该方式后续将下线,不建议使用。在高级设置 > 点击打开中填写如下:




Rest API 使用

在推送消息体中,body.message.android 下添加 actionaction_type 字段,属性如下:
字段名
类型
父项目
默认值
必需
参数描述
action
Object
Android
设置点击通知栏之后的行为,默认为打开 App
action_type
Integer
Action
点击动作类型,
1:打开 activity 或 App 本身
2:打开浏览器
3:打开 Intent(推荐 配置指引

使用 Intent 方式跳转(推荐)

完整的消息示例如下:
{
"audience_type": "token",
"token_list": [
"04xxx993"
],
"message_type": "notify",
"message":{
"title": "xxx",
"content": "xxx",
"android": {
"action": {
"action_type": 3, // 动作类型,1,打开 activity 或 App 本身;2,打开浏览器;3,打开 Intent
"intent": "xgscheme://com.tpns.push/notify_detail" //SDK 版本需要大于等于1.0.9,然后在客户端的intent配置 data 标签,并设置 scheme 属性
}
}
}
}
若需要带上 param1 和 param2 等业务自定义参数,您可以做如下设置:
{
"audience_type": "token",
"token_list": [
"04xxx993"
],
"message_type": "notify",
"message":{
"title": "xxx",
"content": "xxx",
"android": {
"action": {
"action_type": 3, // 动作类型,1:打开 activity 或 App 本身;2:打开浏览器;3:打开 Intent
"intent": "xgscheme://com.tpns.push/notify_detail?param1=aa&param2=bb" //SDK 版本需要大于等于1.0.9,然后在客户端的 intent 配置 data 标签,并设置 scheme 属性
}
}
}
}
说明:
如果客户端需要获取参数做其他响应,参考 客户端获取参数

打开应用

完整的消息示例如下:
{
"audience_type": "token",
"token_list": [
"04xxx993"
],
"message_type": "notify",
"message":{
"title": "xxx",
"content": "xxx",
"android": {
"action": {
"action_type": 1 // 动作类型,1:打开 activity 或 App 本身;2:打开浏览器;3:打开 Intent
}
}
}
}

跳转至 URL

完整的消息示例如下:
{
"audience_type": "token",
"token_list": [
"04xxx993"
],
"message_type": "notify",
"message":{
"title": "xxx",
"content": "xxx",
"android": {
"action": {
"action_type": 2, // 动作类型,1:打开 activity 或 App 本身;2:打开浏览器;3:打开 Intent
"browser": {
"url": "http://tpns.qq.com", // 仅支持http、https
"confirm": 1 // 是否需要用户确认
}
}
}
}
}

打开应用内 Activity

完整的消息示例如下:
{
"audience_type": "token",
"token_list": [
"04xxx993"
],
"message_type": "notify",
"message":{
"title": "xxx",
"content": "xxx",
"android": {
"action": {
"action_type": 1, // 动作类型,1:打开 activity 或 App 本身;2:打开浏览器;3:打开 Intent
"activity": "com.x.y.MainActivity",
"aty_attr": {// activity 属性,只针对 action_type=1 的情况
"if": 0, // Intent 的 Flag 属性
"pf": 0 // PendingIntent 的 Flag 属性
}
}
}
}
}

客户端获取参数

1. 在您跳转指定的 activity 页面 onCreate 方法内,添加如下获取 intent uri 代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_temp);

// ...

// onCreate 内获取

// 当使用 intent uri (客户端自定义)方式推送,且在 intent 尾部添加了参数,可以通过此段代码获取各参数值。
// 例如推送的 intent 值为 xgscheme://com.tpns.push/notify_detail?param1=aa&param2=bb,
// 则可以通过此段代码获取到 param1 的值 aa 和 param2 的值 bb。
Uri uri = getIntent().getData();
Log.i(TAG, "onCreate get data uri: " + uri);
if (uri != null) {
String url = uri.toString();
String p1 = uri.getQueryParameter("param1");
String p2 = uri.getQueryParameter("param2");
}

// SDK 1.3.2.0 起新增
// 当创建推送任务时有填自定义参数(custom_content),可以通过此接口获取 custom_content 字符串内容。
String customContent = XGPushManager.getCustomContentFromIntent(this, this.getIntent());

// ...
}
2. 如您的 activity 页面为应用常驻页面,例如配置了启动模式 launchMode 为 singleTop 或 singleTask,推送点击的 intent 内容将通过 activity 页面的 onNewIntent 方法触发,请同时在 onNewIntent 方法内添加如下获取 intent uri 代码。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);

// ...

// onNewIntent 内获取

// 当使用 intent uri (客户端自定义)方式推送,且在 intent 尾部添加了参数,可以通过此段代码获取各参数值。
// 例如推送的 intent 值为 xgscheme://com.tpns.push/notify_detail?param1=aa&param2=bb,
// 则可以通过此段代码获取到 param1 的值 aa 和 param2 的值 bb。
Uri uri = intent.getData();
Log.i(TAG, "onNewIntent get data uri: " + uri);
if (uri != null) {
String url = uri.toString();
String p1 = uri.getQueryParameter("param1");
String p2 = uri.getQueryParameter("param2");
}

// SDK 1.3.2.0 起新增
// 当创建推送任务时有填自定义参数(custom_content),可以通过此接口获取 custom_content 字符串内容。
String customContent = XGPushManager.getCustomContentFromIntent(this, intent);

// ...
}
3.如果传参包含有特殊字符,可以在创建推送时将参数值进行 URLEncode,然后在终端内使用 URLDecode 进行解析,示例如下:
Uri uri = getIntent().getData();
if (uri != null) {
String p1 = uri.getQueryParameter("param1");
String value1 = "";
try {
// 自定义参数 param1 的值包含特殊字符,创建推送时可将 param1 的值进行 URLEncode;此处获取时则进行 URLDecode
value1 = URLDecoder.decode(p1, "UTF-8");
} catch (UnsupportedEncodingException e) {
Log.w("TPNS", "URLDecode param failed: " + e.toString());
}
// 自定义参数 param2 未进行 URLEncode,直接获取即可
String value2 = uri.getQueryParameter("param2");
Log.i("TPNS" , "value1 = " + value1);
}

iOS 使用

用户可以在通知中携带自定义参数字段下发,通过解析客户端获取的参数自行实现跳转或者其他业务逻辑。

控制台使用

使用 移动推送控制台 设置参数,在高级设置 > 附加参数中填写如下:



Rest API 使用

在推送消息体中,body.message.ios 下添加 custom_content 字段,属性如下:
字段名
类型
父项目
默认值
必需
参数描述
custom_content
String
ios
自定义下发的参数,需要序列化为 json string
完整的消息示例如下:
{
"audience_type": "token",
"environment": "dev",
"token_list": [
"0250df875c93c555dd3a2ba536b54fc1xxxx"
],
"message_type": "notify",
"message": {
"title": "xxx",
"content": "xxxxxxxxx",
"ios": {
"aps": {
"alert": {
"subtitle": "xxx"
}
},
"custom_content": "{\\"key\\":\\"value\\"}"
}
}
}

客户端获取参数

如果您通过 iOS SDK 集成,可以通过统一点击消息回调获取自定义参数,此回调方法是应用在所有状态(前台、后台、关闭)下的通知消息点击回调。
/// 统一点击回调
/// @param response 如果 iOS 10+/macOS 10.14+ 则为 UNNotificationResponse,低于目标版本则为 NSDictionary
/// @note TPNS SDK1.2.7.1+
- (void)xgPushDidReceiveNotificationResponse:(nonnull id)response withCompletionHandler:(nonnull void (^)(void))completionHandler {
NSLog(@"[TPNS Demo] click notification");
if ([response isKindOfClass:[UNNotificationResponse class]]) {
/// iOS10+消息体获取
NSLog(@"notification dic: %@", ((UNNotificationResponse *)response).notification.request.content.userInfo);
} else if ([response isKindOfClass:[NSDictionary class]]) {
/// <IOS10消息体获取
NSLog(@"notification dic: %@", response);
}
completionHandler();
}


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈