通知点击跳转

最后更新时间:2021-07-14 15:34:22

    使用场景

    当订阅者点击您的通知时,可以根据您的配置跳转至指定的应用内页面、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 >
           <action android:name="android.intent.action.VIEW" />
           <category android:name="android.intent.category.DEFAULT"/>
           <!-- 通过自定义 data 块内容指定您的完整 scheme,按照您的配置,将会组成形如"语义名://主机名/路径名"的 url 标识 -->
           <!-- 为防止和其他应用的跳转目标页面冲突,您可以使用带有 app 名称、app 包名等可以唯一标记应用的字段进行配置-->
           <data
                 android:scheme="语义名"
                 android:host="主机名"
                 android:path="/路径名" />
       </intent-filter>
    </activity>
    

    控制台使用

    使用 Intent 方式跳转(推荐)

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

    打开应用

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

    跳转至 URL

    使用 移动推送 TPNS 控制台 设置 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 代码
      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");
      }

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

      // ...

      // onNewIntent 内获取 intent uri 代码
      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");
      }

      // ...
      }

    iOS 使用

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

    控制台使用

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

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

    如果您通过 Flutter 插件集成,冷启动时需要在 runner->AppDelegate->didFinishLaunchingWithOptions 方法通过以下接口获取:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {
            // 消息内容获取
            NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
            // 然后根据消息内容进行逻辑处理
    }