Android极光推送厂商离线通道集成文档及flutter集成总结
《极光推送厂商离线通道集成文档》flutter集成指南
·
《极光推送厂商离线通道集成文档》
flutter集成指南
1.Android端配置
gradle配置
//极光推送
def jpushVersion = '4.4.0'
implementation "cn.jiguang.sdk:jpush:$jpushVersion"
implementation 'cn.jiguang.sdk:jcore:3.0.0-release'
manifestPlaceholders = [
JPUSH_PKGNAME: "包名",
JPUSH_APPKEY : "秘钥", /*NOTE: JPush 上注册的包名对应的 Appkey.*/
JPUSH_CHANNEL: "developer-default", /*暂时填写默认值即可.*/
]
2.flutter引入极光推送
dependencies:
jpush_flutter: 2.1.4
更多查看flutter端集成文档:
https://github.com/jpush/jpush-flutter-plugin
https://www.jianshu.com/p/c58e1f923d32
此时的配置仅仅能够收到极光通道的在线推送,对于离线通道将受到影响,接下来继续集成
3.在android端项目的build.gradle文件中
新增厂商离线通道配置
//极光推送
def jpushVersion = '4.4.0'
implementation "cn.jiguang.sdk:jpush:$jpushVersion"
implementation 'cn.jiguang.sdk:jcore:3.0.0-release'
//新增的离线通道配置
implementation 'com.huawei.hms:push:5.3.0.301'
implementation "cn.jiguang.sdk.plugin:huawei:$jpushVersion"
implementation "cn.jiguang.sdk.plugin:xiaomi:$jpushVersion"
implementation "cn.jiguang.sdk.plugin:vivo:$jpushVersion"
implementation "cn.jiguang.sdk.plugin:meizu:$jpushVersion"
implementation "cn.jiguang.sdk.plugin:oppo:$jpushVersion"
4.android端新增厂商通道接收处理的回调Activity
假设项目包名为:com.example.push
厂商通道的推送通知处理解析逻辑如下
package com.example.push;
import android.app.Activity;
import android.os.Bundle;
import android.text.TextUtils;
import org.json.JSONException;
import org.json.JSONObject;
import cn.jpush.android.api.JPushInterface;
import timber.log.Timber;
/**
* 离线厂商通道回调页面
*/
public class PopupPushActivity extends Activity {
private final String TAG = PushConstant.TAG;
/**
* 消息Id
**/
private static final String KEY_MSGID = "msg_id";
/**
* 该通知的下发通道
**/
private static final String KEY_WHICH_PUSH_SDK = "rom_type";
/**
* 通知标题
**/
private static final String KEY_TITLE = "n_title";
/**
* 通知内容
**/
private static final String KEY_CONTENT = "n_content";
/**
* 通知附加字段
**/
private static final String KEY_EXTRAS = "n_extras";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handleOpenClick();
}
/**
* 处理点击事件,当前启动配置的Activity都是使用
* Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK
* 方式启动,只需要在onCreat中调用此方法进行处理
*/
private void handleOpenClick() {
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");
}
Timber.tag(TAG).d("【离线通道打开】%s", data);
if (TextUtils.isEmpty(data)) return;
try {
JSONObject jsonObject = new JSONObject(data);
String msgId = jsonObject.optString(KEY_MSGID);
byte whichPushSDK = (byte) jsonObject.optInt(KEY_WHICH_PUSH_SDK);
String title = jsonObject.optString(KEY_TITLE);
String message = jsonObject.optString(KEY_CONTENT);
String extras = jsonObject.optString(KEY_EXTRAS);
// TODO: 2021/12/7/007 处理跳转离线消息
// 此时的跳转逻辑,需要判断app是否在前台,如果不在,需要添加跳转逻辑新增flag标记
// intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Intent intent = new Intent(YLApplication.this, MainActivity.class);
intent.putExtra("title",title);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
//上传事件统计
uploadReport(msgId, whichPushSDK, title, message, extras);
} catch (JSONException e) {
Timber.tag(TAG).e(e);
}
finish();
}
private void uploadReport(String msgId, byte whichPushSDK, String title, String message, String extras) {
StringBuilder sb = new StringBuilder();
sb.append("msgId:");
sb.append(msgId);
sb.append("\n");
sb.append("title:");
sb.append(title);
sb.append("\n");
sb.append("content:");
sb.append(message);
sb.append("\n");
sb.append("extras:");
sb.append(extras);
sb.append("\n");
sb.append("platform:");
sb.append(getPushSDKName(whichPushSDK));
//上报点击事件
JPushInterface.reportNotificationOpened(this, msgId, whichPushSDK);
}
private String getPushSDKName(byte whichPushSDK) {
String name;
switch (whichPushSDK) {
case 0:
name = "jpush";
break;
case 1:
name = "xiaomi";
break;
case 2:
name = "huawei";
break;
case 3:
name = "meizu";
break;
case 4:
name = "oppo";
break;
case 5:
name = "vivo";
break;
case 6:
name = "asus";
break;
case 8:
name = "fcm";
break;
default:
name = "jpush";
}
return name;
}
}
5.服务端推送配置
这个时候需要新增部分参数,来指定厂商通道时的消息通知页面
服务端java推送的部分代码
pushRequest.setAndroidOpenType("ACTIVITY");
pushRequest.setAndroidActivity("com.example.push.PopupPushActivity");
pushRequest.setAndroidPopupActivity("com.example.push.PopupPushActivity");
6.android端初始化逻辑要记得加上
JPushInterface.setDebugMode(isDebug);
JPushInterface.setChannel(application, "xxx");
JPushInterface.init(application);
7.剩下的api调用按照业务逻辑处理即可,到这里集成就完成了
更多推荐
所有评论(0)