极光消息推送Android 通知点击跳转教程

极光强烈建议你升级 SDK 至 4.6.0 及以上版本,并配置通知跳转目标地址来实现点击通知跳转功能。

本文旨要介绍有目标地址时如何使用 intent、deeplink 和直接打开应用的方式实现点击通知跳转到目标页面。极光强烈建议你升级 SDK 至 4.6.0 及以上版本,并配置通知跳转目标地址来实现点击通知跳转功能。

支持版本

Rest API 的 intent 字段包括 intent、deeplink 和直接打开应用的跳转方式。

  • SDK<4.2.2 的版本,intent 字段值仅走华硕通道和极光通道时生效,不影响请求走其它厂商通道。
  • SDK ≥ 4.2.2 的版本,API 推送时建议填写 intent 字段,否则点击通知可能无跳转动作。

配置目标地址说明

配置通知跳转目标地址指推送下发时有在控制台或者 API 中完成以下配置。

控制台配置

控制台下发时配置 “Android 点击通知打开”中任意一个选项。 

极光消息推送Android 通知点击跳转教程

API 使用

API 推送时在 notification.android 下发 intent 或者 uri_activity、uri_action 字段。

  • SDK ≥ 4.2.2 的版本,只需要填写 intent 参数。
  • SDK<4.2.2 的版本,且配置过 uri_activity 和 uri_action 跳转的,只需要填写 uri_activity 和 uri_action。
关键字类型选项含义说明
intentJSON Object可选指定跳转页面使用 intent 里的 url 指定点击通知栏后跳转的目标页面;SDK<4.2.2的版本,此字段值仅对走华硕通道和极光自有通道下发生效,不影响请求走其它厂商通道。SDK≥4.2.2的版本,API 推送时建议填写 intent 字段,否则点击通知可能无跳转动作。此字段支持以下三种类型:
1. 跳转到目标页:
intent:#Intent;action=action 路径;component=包名/Activity 全名;end
(OPPO 和 FCM 通道必须传”action 路径”, 其他厂商必须传”Activity 全名”, 否则将出现对应厂商无法跳转问题)
2. 跳转到 deeplink 地址:
scheme://test?key1=val1&key2=val2
3. 应用首页: intent:#Intent;action=android.intent.action.MAIN;end (固定为此地址)
uri_activitystring可选指定跳转页面该字段用于指定开发者想要打开的 activity,值为 activity 节点的 “android:name”属性值。适配华为、小米、vivo 厂商通道跳转。Jpush SDK≥V4.2.2,可不再填写本字段,仅设置 intent 字段即可。
uri_actionstring可选指定跳转页面该字段用于指定开发者想要打开的 activity,值为 “activity”-“intent-filter”-“action” 节点的 “android:name” 属性值。适配 oppo、fcm跳转。Jpush SDK≥V4.2.2,可不再填写本字段,仅设置 intent 字段即可,但若需兼容旧版 SDK 必须填写该字段。

intent 方式(推荐)

格式说明

固定格式 :intent:#Intent;action=”action 路径”;component=”包名”/”Activity 组件路径”;end

  • intenturi 必须以 “intent:#Intent;” 开头,以 “;end” 结尾。
  • 不允许存在多个 “action=” 字符或 “component=” 字符。

示例:

          intent:#Intent;action=cn.jiguang.myaction;component=cn.jiguang.jumptest/cn.jiguang.jumptest.OpenClickActivity;end

        

携带参数格式:intent:#Intent;action=“action 路径”;component=”包名”/”Activity 组件路径”;S.key1=value1;i.key2=2;end

  • “S.”:代表参数值是 String 格式。
  • “i.”:代表参数值是 Int 格式。

示例:

          intent:#Intent;action=cn.jiguang.myaction;component=cn.jiguang.jumptest/cn.jiguang.jumptest.OpenClickActivity;S.key1=value;i.key2=2;end

        

客户端配置

在 AndroidManifest 中完成以下配置。

OPPO 通道和 FCM 通道必须配置 action 和 category 才可以跳转。

          <activity
    android:name="cn.jiguang.jumptest.OpenClickActivity"
    android:exported="true"
    android:launchMode="singleTask"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="cn.jiguang.myaction" ></action>
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

        

服务端使用

控制台使用

进入【消息推送】-【推送管理】-【创建推送】页面,选择 Android 平台, 并在 “Android 点击通知打开”中选择“intent(推荐)”,填写 intent 。

极光消息推送Android 通知点击跳转教程

API 使用

  • SDK ≥ 4.2.2 的版本,只需要填写 intent 参数,参数详情参考 API 使用
  • SDK<4.2.2 的版本,且配置过 uri_activity 和 uri_action 跳转的,只需要填写 uri_activity 和 uri_action。
          {
    "notification" : {
        "android" : {
             "alert" : "hello, JPush!", 
             "title" : "JPush test", 
             "intent": {
                "url": "intent:#Intent;action=cn.jiguang.myaction;component=cn.jiguang.jumptest/cn.jiguang.jumptest.OpenClickActivity;S.key1=value;i.key2=3;end"
            },
            "uri_activity": "cn.jiguang.jumptest.OpenClickActivity",//兼容4.2.2以下版本
            "uri_action": "cn.jiguang.jumptest.OpenClickActivity"//兼容4.2.2以下版本
            
        }
    }
}

        

客户端获取参数

若需要跳转至页面指定位置,推送时可以下发自定义参数,获取参数后自行处理业务跳转逻辑。

获取 intent 携带参数

SDK 针对 intent 配置的参数均是透传的,所以在目标 Activity 直接获取 intent 跳转获取参数即可。

          package cn.jiguang.jumptest;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        handleIntent();
    }
 
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        handleIntent();
    }
    void handleIntent(){
        if(getIntent()!=null){
            String value1 =getIntent().getStringExtra("key1");
            int value2 =getIntent().getIntExtra("key2",0);
            Log.e("MainActivity",""+value1);
            Log.e("MainActivity",""+value2);
        }
    }
}

        

获取 Extras 附加参数

极光消息推送Android 通知点击跳转教程
  • SDK < 4.6.0 版本时,极光通道有 onNotifyMessageOpened 点击回调,厂商通道没有 onNotifyMessageOpened 点击回调。
  • SDK ≥ 4.6.0 版本时,Android 极光通道和厂商通道统一处理:无通知跳转目标地址有 onNotifyMessageOpened 点击回调,有通知跳转目标地址时没有 onNotifyMessageOpened 点击回调。

1.有配置通知跳转目标地址时:

  • SDK<4.6.0 版本
    • 华为通道使用getIntent().getData().toString()方法获取参数。
    • 小米、vivo、OPPO、FCM、魅族通道使用 getIntent().getExtras().getString(“JMessageExtra”) 方法获取参数。
    • 极光通道在回调的函数 onNotifyMessageOpened(Context context, NotificationMessage message) 中的 message 中获取参数。
  • SDK ≥ 4.6.0 版本
    • 华为通道使用getIntent().getData().toString()方法获取参数。
    • 小米、vivo、OPPO、FCM、魅族、荣耀、极光通道使用 getIntent().getExtras().getString(“JMessageExtra”) 方法获取参数。

2.无配置通知跳转目标地址时:

  • SDK<4.6.0 版本时:
    • 厂商通道没有点击回调,点击无法跳转,无法获取参数。
    • 极光通道在回调的函数 onNotifyMessageOpened(Context context, NotificationMessage message) 中的 message 中获取参数。
  • SDK ≥ 4.6.0 版本时,所有通道在回调的函数 onNotifyMessageOpened(Context context, NotificationMessage message) 中的 message 中获取参数。

示例如下

          package com.HuananThirdPush.cn;

import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.widget.TextView;
import org.json.JSONException;
import org.json.JSONObject;
import cn.jpush.android.api.JPushInterface;

public class OpenClickActivity extends Activity {
    private static final String TAG = "OpenClickActivity";
    /**通知附加字段**/
    private static final String KEY_EXTRAS = "n_extras";
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mTextView = new TextView(this);
        setContentView(mTextView);
        handleOpenClick();
    }

    /**
     * 处理点击事件,当前启动配置的Activity都是使用
     * Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
     * 方式启动,只需要在onCreat中调用此方法进行处理
     */
    private void handleOpenClick() {
        Log.d(TAG, "用户点击打开了通知");
        String data = null;
        
        //获取华为平台附带的jpush信息
        if (getIntent().getData() != null) {
            data = getIntent().getData().toString();
        }

        //获取fcm/oppo/小米/vivo/魅族/荣耀 平台附带的jpush信息
        if (TextUtils.isEmpty(data) && getIntent().getExtras() != null) {
            data = getIntent().getExtras().getString("JMessageExtra");
        }

        Log.w(TAG, "msg content is " + String.valueOf(data));
        if (TextUtils.isEmpty(data)) return;
        try {
            JSONObject jsonObject = new JSONObject(data);
            String extras = jsonObject.optString(KEY_EXTRAS);
            StringBuilder sb = new StringBuilder();
            sb.append("extras:");
            sb.append(String.valueOf(extras));
            sb.append("\n");
            mTextView.setText(sb.toString());

    }
}

        

格式说明

固定格式:

  • scheme://
  • scheme://host
  • scheme://host/path

携带参数格式:
scheme://host/path?key1=val1&key2=val2

客户端配置

在 AndroidManifest 中完成以下配置。

  • action、category 必须按照下列示例配置。
  • data 的 scheme 必须配置,其他参数可选。
          
<activity android:name=".DeeplinkTestActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="jiguang"
            android:host="deeptest"
            android:path="/index"/>
    </intent-filter>
</activity>

        

服务端使用

控制台使用

进入【消息推送】-【推送管理】-【创建推送】页面,选择 Android 平台, 并在 “Android 点击通知打开”中选择“DeepLink”,填写 DeepLink。 

极光消息推送Android 通知点击跳转教程

API 使用

  • SDK ≥ 4.2.2 的版本,只需要填写 intent 参数,参数详情参考 API 使用
  • SDK<4.2.2 的版本,且配置过 uri_activity 和 uri_action 跳转的,只需要填写 uri_activity 和 uri_action。
          {
    "notification" : {
        "android" : {
             "alert" : "hello, JPush!", 
             "title" : "JPush test", 
             "intent": {
                "url": "jiguang://deeptest/index?key1=val1&key2=val2"
            },
            "uri_activity": "cn.jiguang.jumptest.DeeplinkTestActivity",//兼容4.2.2以下版本
            "uri_action": "cn.jiguang.jumptest.DeeplinkTestActivity"//兼容4.2.2以下版本
            
        }
    }
}

        

打开应用方式

API 使用

控制台使用

进入【消息推送】-【推送管理】-【创建推送】页面,选择 Android 平台, 并在 “Android 点击通知打开”中选择“打开应用”。 

极光消息推送Android 通知点击跳转教程

API 使用

  • SDK ≥ 4.2.2 的版本,只需要填写 intent 参数,参数详情参考 API 使用
  • SDK<4.2.2 的版本,且配置过 uri_activity 和 uri_action 跳转的,只需要填写 uri_activity 和 uri_action。
          {
    "notification": {
        "android": {
            "alert": "hello, JPush!",
            "title": "JPush test",
            "intent": {
                "url": "intent:#Intent;action=android.intent.action.MAIN;end"
            },
            "uri_activity": "cn.jiguang.jumptest.MainActivity", //兼容4.2.2以下版本
            "uri_action": "cn.jiguang.jumptest.MainActivity" //兼容4.2.2以下版本
        }
    }
}

        

编辑:yimen,如若转载,请注明出处:https://www.yimenapp.com/kb-yimen/15839/

部分内容来自网络投稿,如有侵权联系立删

(1)
上一篇 2022年12月22日 下午3:07
下一篇 2022年12月22日 下午3:16

相关推荐