# 消息推送模块
以下接口生效依赖于推送模块,需集成推送SDK相关analysys_push_xxx.jar文件,请正确集成。
## 简介
推送消息是一种常用的运营方法。在合适的时间把合适的内容通过合适的方式推送给合适的人群,不仅能促进用户活跃,也能极大提升用户对产品的体验。 易观推送现在支持极光、个推、百度、小米等平台。支持通过易观开发者平台设置以下三种类型的推送消息内容: 注意:该接口依赖于推送模块
* 下发通知,点击通知,打开宿主 App
* 下发通知,点击通知,打开宿主 App 的特定页面
* 下发通知,点击通知,触发打开特定的 URL 页面
首先,开发者需要在 App 中集成第三方推送系统的 SDK,并在 App 初始化过程中获取设备推送 ID,并保存在方舟分析的用户信息中。以下简要说明集成第三方推送系统的集成方式(在 4.4 中可参考各平台相关说明及示例代码)
## 设置设备推送 ID
该接口用于设置推送平台(provider)提供的设备推送 ID。 接口如下:
```java
setPushID(Context mContext, String provider,String pushId)
```
* mContext:上下文
* provider:推送服务方,易观SDK支持的平台,可从 PushProvider 中查询
* pushId:对应服务方的关于该移端端的唯一 ID
调用方法,以极光为例:
```java
AnalysysAgent.setPushID(context, PushProvider.JPUSH, 极光推送对应的设备ID);
```
对应表:
| 推送ID | 推送平台 | 调用方式 |
| ------ | ---- | ------------------- |
| GETUI | 个推 | PushProvider.GETUI |
| JPUSH | 极光 | PushProvider.JPUSH |
| BAIDU | 百度 | PushProvider.BAIDU |
| XIAOMI | 小米 | PushProvider.XIAOMI |
## 统计活动推广信息
### 追踪活动推广信息 API
追踪记录 provider 对应平台的消息推送的信息。 接口如下:
```java
trackCampaign (Context mContext, String campaign, boolean isClick)
```
* mContext:上下文
* campaign:该对象为一个 jsonObject 的 String 格式,其具体内容,为推送服务下发下来的 JsonString,直接传入 trackCampaign 接口即可
* isClick:活动通知是否点击打开
调用方法:
```java
AnalysysAgent.trackCampaign (context, campaignString, isClick);
```
#### 追加 PushListener 参数的追踪活动推广信息 API
```java
trackCampaign (Context mContext, String campaign, boolean isClick, PushListener listener)
```
* mContext:上下文
* campaign:该对象为一个 jsonObject 的 String 格式,其具体内容,为推送服务下发下来的 JsonString,直接传入 trackCampaign 接口即可
* isClick:活动通知是否点击打开
* listener:活动推送的后续自定义属性和行为的监听
调用方法:
```java
PushListener listener = new PushListener() {
@Override
public void execute(String action, String jsonParams) {
Log.e("EgPushTAG","通知被点击");
}
};
AnalysysAgent.trackCampaign(context, campaign, isClick, listener);
```
## 三方推送平台 SDK 集成及示例代码
首先,开发者需要在 App 中集成第三方推送系统的 SDK,并在 App 初始化过程中获取设备推送 ID,并保存在方舟分析的用户信息中。目前易观SDK支持极光、百度、小米、个推四家第三方推送统计的支持。以下简要说明集成第三方推送系统的集成方式。
### 极光推送
请参考极光推送[《Android SDK 文档》](https://docs.jiguang.cn/jpush/client/Android/android_sdk/),将极光推送的 SDK 集成到 App 中。开发者需要将 App 的设备推送 ID 保存在方舟分析的用户信息中。方舟分析的用户分群等分析功能会使用该设备推送 ID 进行用户关联。
极光推送使用唯一的 Registration Id 标示设备。开发者需要在 Manifest 中定义 Receiver 接受极光推送的广播,通过 cn.jpush.android.intent.REGISTRATION 消息获取 Registration Id。
```java
<receiver
android:name="Your Receiver"
android:enabled="true">
<intent-filter>
<action android:name="cn.jpush.android.intent.REGISTRATION" />
<action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" />
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
<category android:name="You package Name" />
</intent-filter>
</receiver>
```
Receiver 在 onReceiver 回调中接收的 Intent 中JPushInterface.EXTRA_REGISTRATION_ID 的 Action 中获取为 Registration Id ,开发者在极光推送初始化完成后,在广播中获取JPushInterface.EXTRA_REGISTRATION_ID 的值为 Registration Id 并将他保存在方舟分析的用户信息中;JPushInterface.ACTION_NOTIFICATION_RECEIVED 的 Action 表示通知被接收;JPushInterface.ACTION_NOTIFICATION_OPENED 的Action 表示通知接收成功后,被用户点击。
```java
public void onReceive(Context context, Intent intent) {
mContext = context;
Bundle bundle = intent.getExtras();
if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
Log.d(TAG, "接收Registration Id: " + regId);
//易观打开推送接口
AnalysysAgent.setPushID(context, PushProvider.JPUSH, regId);
} else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
Log.d(TAG, "接收到推送下来的通知的ID: " + notifactionId);
//接收到Push的通知
AnalysysAgent.trackCampaign(context,bundle.getString(JPushInterface.EXTRA_EXTRA),false);
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
Log.d(TAG, "用户点击打开了通知");
//易观添加活动推广接口,点击了Push推下来的通知
AnalysysAgent.trackCampaign(context,bundle.getString(JPushInterface.EXTRA_EXTRA),true);
}
}
```
当统计消息接收成功或统计点击通知后需要执行自定义行为是,可实现 PushListener 接口,将实现对象传入 trackCampaign,例如要在点击通知后,输出日志,如下调用:
```java
PushListener listener = new PushListener() {
@Override
public void execute(String action, String jsonParams) {
Log.e("EgPushTAG","通知被点击");
}
};
AnalysysAgent.trackCampaign(context,bundle.getString(JPushInterface.EXTRA_EXTRA),true,listener);
```
### 个推推送
请参考个推推送[《Android SDK 文档》](http://docs.getui.com/getui/start/andorid/),将个推推送的 SDK 集成到 App 中。开发者需要将 App 的设备推送 ID 保存在方舟分析的用户信息中。方舟分析的用户分群等分析功能会使用该设备推送 ID 进行用户关联。
个推推送使用唯一的 clientid 标示设备。开发者需要在 Manifest 中定义 继承GTIntentService 的自定义 Service 接受个推推送的消息。
```java
<service android:name="Your service" />
```
在继承自 GTIntentService 的 Service 中复写回调方法,在 onReceiveClientId回调中调用 setPushID,将他保存在方舟分析的用户信息中;在onNotificationMessageArrived回调接口中调用 trackCampaign 接口设置通知展现追踪;在onNotificationMessageClicked回调接口中调用 trackCampaign 接口设置通知点击追踪;在 onReceiveMessageData 回调接口中调用 trackCampaign 接口设置透传消息追踪。
```java
@Override
public void onReceiveClientId(Context context, String clientid) {
Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
AnalysysAgent.setPushID(context, PushProvider.GETUI,clientid);
}
@Override
public void onNotificationMessageArrived(Context context, GTNotificationMessage
gtNotificationMessage) {
Log.e(TAG, "onNotificationMessageArrived -> " + "msg:" + gtNotificationMessage.toString());
String data = gtNotificationMessage.getContent();
AnalysysAgent.trackCampaign(context, data, false, listener);
}
@Override
public void onNotificationMessageClicked(Context context,
GTNotificationMessage gtNotificationMessage) {
Log.e(TAG, "onNotificationMessageClicked -> " + "msg:" + gtNotificationMessage.toString());
String data = gtNotificationMessage.getContent();
AnalysysAgent.trackCampaign(context, data, true, listener);
}
@Override
public void onReceiveMessageData(Context context, GTTransmitMessage gtTransmitMessage) {
Log.e(TAG,"onReceiveMessageData -> " + "msg:" + gtTransmitMessage.toString());
byte[] payload = gtTransmitMessage.getPayload();
String data = new String(payload);
AnalysysAgent.trackCampaign(context,data,true);
}
```
当统计点击通知后需要执行自定义行为时,可实现 PushListener 接口,将实现对象传入 trackCampaign,例如要在点击通知后,输出日志,如下调用:
```java
PushListener listener = new PushListener() {
@Override
public void execute(String action, String jsonParams) {
Log.e("EgPushTAG","通知被点击");
}
};
AnalysysAgent.trackCampaign(context,data,true,listener);
```
### 百度云推送
请参考百度云推送[《Android SDK 文档》](http://push.baidu.com/doc/android/api),将百度云推送的 SDK 集成到 App 中。开发者需要将 App 的设备推送 ID 保存在方舟分析的用户信息中。方舟分析的用户分群等分析功能会使用该设备推送 ID 进行用户关联。
百度云推送使用唯一的 Registration Id 标示设备。开发者需要在 Manifest 中定义 Receiver 接受百度云推送的广播,通过 com.baidu.android.pushservice.action.RECEIVE 消息获取 Registration Id。
```java
<receiver android:name="Your Receiver">
<intent-filter>
<!-- 接收push消息 -->
<action android:name="com.baidu.android.pushservice.action.MESSAGE" />
<!-- 接收bind,unbind,fetch,delete等反馈消息 -->
<action android:name="com.baidu.android.pushservice.action.RECEIVE" />
<action android:name="com.baidu.android.pushservice.action.notification.CLICK" />
</intent-filter>
</receiver>
```
在百度的 Receiver 在自定义了获取百度推送 ID 的回调接口 onBind,获取Channel Id,在该回调中调用 setPushID,将他保存在方舟分析的用户信息中;在 onNotificationArrived 回调接口中,调用 trackCampaign 接口设置接收通知成功;在 onNotificationClicked 回调接口中,调用 trackCampaign 接口设置用户点击通知后事件追踪。
```java
@Override
public void onBind(Context context, int errorCode, String appid,
String userId, String channelId, String requestId) {
Log.d(TAG, responseString);
if (errorCode == 0) {
// 绑定成功
Log.d(TAG, "绑定成功");
AnalysysAgent.setPushID(context, PushProvider.BAIDU,channelId);
}
}
@Override
public void onNotificationArrived(Context context, String title,
String description, String customContentString) {
Log.d(TAG, notifyString);
// 你可以參考 onNotificationClicked中的提示从自定义内容获取具体值
AnalysysAgent.trackCampaign(context,customContentString,false);
}
@Override
public void onNotificationClicked(Context context, String title,
String description, String customContentString) {
Log.d(TAG, notifyString);
AnalysysAgent.trackCampaign(context,customContentString,true);
}
```
当统计点击通知后需要执行自定义行为时,可实现 PushListener 接口,将实现对象传入trackCampaign,例如要在点击通知后,输出日志,如下调用:
```java
PushListener listener = new PushListener() {
@Override
public void execute(String action, String jsonParams) {
Log.e("EgPushTAG","通知被点击");
}
};
AnalysysAgent.trackCampaign(context,customContentString,true,listener);
```
### 小米推送
请参考小米推送[《Android SDK 文档》](https://dev.mi.com/console/doc/detail?pId=41),将小米推送送的 SDK 集成到 App 中。开发者需要将 App 的设备推送 ID 保存在方舟分析的用户信息中。方舟分析的用户分群等分析功能会使用该设备推送 ID 进行用户关联。
小米推送使用唯一的 Registration Id 标示设备。开发者需要在 Manifest 中定义 Receiver 接受小米推送送的广播,通过广播消息获取 Registration Id。
```java
<receiver
android:name="Your Receiver"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
```
广播消息的 MiPushCommandMessage 参数中可以获取到 Registration Id ,开发者在小米推送初始化完成后,在广播中获取 Registration Id 并将他保存在方舟分析的用户信息中; 在回调方法 onNotificationMessageArrived 中记录记录 App 推送成功事件;在 onNotificationMessageClicked 回调中记录用户点击消息打开 App 或执行其他行为的事件
```java
@Override
public void onReceiveRegisterResult(Context context, MiPushCommandMessage message) {
String command = message.getCommand();
List<String> arguments = message.getCommandArguments();
String cmdArg = ((arguments != null && arguments.size() > 0) ? arguments.get(0) : null);
if (MiPushClient.COMMAND_REGISTER.equals(command)) {
if (message.getResultCode() == ErrorCode.SUCCESS) {
AnalysysAgent.setPushID(context, PushProvider.XIAOMI,cmdArg);
}
}
}
@Override
public void onNotificationMessageArrived(Context context, MiPushMessage message) {
mMessage = message.getContent();
AnalysysAgent.trackCampaign(context,mMessage,false);
}
@Override
public void onNotificationMessageClicked(Context context, MiPushMessage message) {
mMessage = message.getContent();
AnalysysAgent.trackCampaign(context,mMessage,true);
}
```
当统计点击通知后需要执行自定义行为时,可实现 PushListener接口,将实现对象传入 trackCampaign,例如要在点击通知后,输出日志,如下调用:
```java
PushListener listener = new PushListener() {
@Override
public void execute(String action, String jsonParams) {
Log.e("EgPushTAG","通知被点击");
}
};
AnalysysAgent.trackCampaign(context,mMessage,true,listener);
```
### 阿里云推送
请参考阿里云推送[《Android SDK 文档》](https://help.aliyun.com/document_detail/51056.html?spm=a2c4g.11186623.6.587.62ed527eQyARCV),将阿里云推送的 SDK 集成到 App 中。开发者需要将 App 的设备推送 ID 保存在方舟分析的用户信息中。方舟分析的用户分群等分析功能会使用该设备推送 ID 进行用户关联。
阿里云推送使用唯一的 DeviceId 标示设备。开发者需要在初始化的时候设置setPushID,将DeviceId保存在方舟分析的用户信息中
```java
PushServiceFactory.init(mContext);
CloudPushService pushService = PushServiceFactory.getCloudPushService();
if (pushService.getDeviceId() != null) {
AnalysysAgent.setPushID(mContext, PushProvider.ALIYUN, pushService.getDeviceId());
}
pushService.register(mContext, new CommonCallback() {
@Override
public void onSuccess(String response) {
}
@Override
public void onFailed(String errorCode, String errorMessage) {
}
});
```
创建消息接收Receiver,继承自com.alibaba.sdk.android.push.MessageReceiver,并在对应回调中添加业务处理逻辑,在onNotification中调用trackCampaign设置通知到达成功;在onNotificationOpened中调用trackCapmaign设置通知点击成功,可参考以下代码:
```java
public class MyMessageReceiver extends MessageReceiver {
// 消息接收部分的LOG_TAG
public static final String REC_TAG = "receiver";
@Override
public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
// TODO 处理推送通知
Log.e("MyMessageReceiver", "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
try {
JSONObject jsonObject = new JSONObject();
if (extraMap != null) {
jsonObject.put(Constants.PUSH_KEY_INFO, extraMap.get(Constants.PUSH_KEY_INFO));
}
AnalysysAgent.trackCampaign(context,jsonObject.toString(),false);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(Context context, CPushMessage cPushMessage) {
Log.e("MyMessageReceiver", "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
}
@Override
public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
try {
JSONObject extraJson = new JSONObject(extraMap);
JSONObject jsonObject = new JSONObject();
if (extraMap != null) {
jsonObject.put(Constants.PUSH_KEY_INFO, extraJson.get(Constants.PUSH_KEY_INFO));
}
AnalysysAgent.trackCampaign(context,jsonObject.toString(),true);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
Log.e("MyMessageReceiver", "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
}
@Override
protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {
Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
}
@Override
protected void onNotificationRemoved(Context context, String messageId) {
Log.e("MyMessageReceiver", "onNotificationRemoved");
}
}
```
### 信鸽推送
请参考信鸽推送[《Android SDK 文档》](https://xg.qq.com/docs/android_access/upgrade_guide.html),将信鸽推送的 SDK 集成到 App 中。开发者需要将 App 的设备推送 ID 保存在方舟分析的用户信息中。方舟分析的用户分群等分析功能会使用该设备推送 ID 进行用户关联。
创建消息接收Receiver,继承自com.tencent.android.tpush.XGPushBaseReceiver,并在对应回调中添加业务处理逻辑。信鸽推送使用唯一的 token 标示设备。开发者需要在 Manifest 中定义 Receiver 接受信鸽推送的广播,通过 XGPushBaseReceiver广播类获取 token,在onRegisterResult回调中通过setPushID来把token信息保存在方舟分析的用户信息中。
在onNotifactionShowedResult中调用trackCampaign设置通知展示成功;在onNotifactionClickedResult中调用trackCapmaign设置通知点击成功,可参考以下代码:
public class XgMessageReceiver extends XGPushBaseReceiver { private Intent intent = new Intent("com.qq.xgdemo.activity.UPDATE_LISTVIEW"); public static final String LogTag = "TPushReceiver";
```
private void show(Context context, String text) {
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
// 通知展示
@Override
public void onNotifactionShowedResult(Context context,
XGPushShowedResult notifiShowedRlt) {
if (context == null || notifiShowedRlt == null) {
return;
}
XGNotification notific = new XGNotification();
notific.setMsg_id(notifiShowedRlt.getMsgId());
notific.setTitle(notifiShowedRlt.getTitle());
notific.setContent(notifiShowedRlt.getContent());
// notificationActionType==1为Activity,2为url,3为intent
notific.setNotificationActionType(notifiShowedRlt
.getNotificationActionType());
//Activity,url,intent都可以通过getActivity()获得
notific.setActivity(notifiShowedRlt.getActivity());
notific.setUpdate_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(Calendar.getInstance().getTime()));
```
// NotificationService.getInstance(context).save(notific); context.sendBroadcast(intent); show(context, "您有1条新消息, " + "通知被展示 , " + notifiShowedRlt.toString()); Log.d("LC", "+++++++++++++++++++++++++++++展示通知的回调");
```
public class XgMessageReceiver extends XGPushBaseReceiver {
private Intent intent = new Intent("com.qq.xgdemo.activity.UPDATE_LISTVIEW");
public static final String LogTag = "TPushReceiver";
private void show(Context context, String text) {
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
// 通知展示
@Override
public void onNotifactionShowedResult(Context context,
XGPushShowedResult notifiShowedRlt) {
if (context == null || notifiShowedRlt == null) {
return;
}
XGNotification notific = new XGNotification();
notific.setMsg_id(notifiShowedRlt.getMsgId());
notific.setTitle(notifiShowedRlt.getTitle());
notific.setContent(notifiShowedRlt.getContent());
// notificationActionType==1为Activity,2为url,3为intent
notific.setNotificationActionType(notifiShowedRlt
.getNotificationActionType());
//Activity,url,intent都可以通过getActivity()获得
notific.setActivity(notifiShowedRlt.getActivity());
notific.setUpdate_time(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(Calendar.getInstance().getTime()));
// NotificationService.getInstance(context).save(notific);
context.sendBroadcast(intent);
show(context, "您有1条新消息, " + "通知被展示 , " + notifiShowedRlt.toString());
Log.d("LC", "+++++++++++++++++++++++++++++展示通知的回调");
notifiShowedRlt.getCustomContent();
Log.d(LogTag, "customContent:" + notifiShowedRlt.getCustomContent() + ",content:" + notifiShowedRlt.getContent());
if (!TextUtils.isEmpty(notifiShowedRlt.getCustomContent())) {
AnalysysAgent.trackCampaign(context,notifiShowedRlt.getCustomContent() , false);
}
}
//反注册的回调
@Override
public void onUnregisterResult(Context context, int errorCode) {
if (context == null) {
return;
}
String text = "";
if (errorCode == XGPushBaseReceiver.SUCCESS) {
text = "反注册成功";
} else {
text = "反注册失败" + errorCode;
}
Log.d(LogTag, text);
show(context, text);
}
//设置tag的回调
@Override
public void onSetTagResult(Context context, int errorCode, String tagName) {
if (context == null) {
return;
}
String text = "";
if (errorCode == XGPushBaseReceiver.SUCCESS) {
text = "\"" + tagName + "\"设置成功";
} else {
text = "\"" + tagName + "\"设置失败,错误码:" + errorCode;
}
Log.d(LogTag, text);
show(context, text);
}
//删除tag的回调
@Override
public void onDeleteTagResult(Context context, int errorCode, String tagName) {
if (context == null) {
return;
}
String text = "";
if (errorCode == XGPushBaseReceiver.SUCCESS) {
text = "\"" + tagName + "\"删除成功";
} else {
text = "\"" + tagName + "\"删除失败,错误码:" + errorCode;
}
Log.d(LogTag, text);
show(context, text);
}
// 通知点击回调 actionType=1为该消息被清除,actionType=0为该消息被点击。此处不能做点击消息跳转,详细方法请参照官网的Android常见问题文档
@Override
public void onNotifactionClickedResult(Context context,
XGPushClickedResult message) {
Log.e("LC", "+++++++++++++++ 通知被点击 跳转到指定页面。");
NotificationManager notificationManager = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.cancelAll();
if (context == null || message == null) {
return;
}
String text = "";
if (message.getActionType() == XGPushClickedResult.NOTIFACTION_CLICKED_TYPE) {
// 通知在通知栏被点击啦。。。。。
// APP自己处理点击的相关动作
// 这个动作可以在activity的onResume也能监听,请看第3点相关内容
text = "通知被打开 :" + message;
} else if (message.getActionType() == XGPushClickedResult.NOTIFACTION_DELETED_TYPE) {
// 通知被清除啦。。。。
// APP自己处理通知被清除后的相关动作
text = "通知被清除 :" + message;
}
Toast.makeText(context, "广播接收到通知被点击:" + message.toString(),
Toast.LENGTH_SHORT).show();
// 获取自定义key-value
String customContent = message.getCustomContent();
if (customContent != null && customContent.length() != 0) {
try {
JSONObject obj = new JSONObject(customContent);
// key1为前台配置的key
if (!obj.isNull("key")) {
String value = obj.getString("key");
Log.d(LogTag, "get custom value:" + value);
}
// ...
} catch (JSONException e) {
e.printStackTrace();
}
}
// APP自主处理的过程。。。
Log.d(LogTag, text);
show(context, text);
Log.d(LogTag, "customContent:" + message.getCustomContent() + ",content:" + message.getContent());
if (!TextUtils.isEmpty(message.getCustomContent())) {
AnalysysAgent.trackCampaign(context, message.getCustomContent(), true);
}
}
//注册的回调
@Override
public void onRegisterResult(Context context, int errorCode,
XGPushRegisterResult message) {
// TODO Auto-generated method stub
if (context == null || message == null) {
return;
}
String text = "";
if (errorCode == XGPushBaseReceiver.SUCCESS) {
text = message + "注册成功";
// 在这里拿token
String token = message.getToken();
} else {
text = message + "注册失败错误码:" + errorCode;
}
Log.d(LogTag, text);
show(context, text);
if (!TextUtils.isEmpty(message.getToken())) {
AnalysysAgent.setPushID(context, PushProvider.XINGE, message.getToken());
}
}
// 消息透传的回调
@Override
public void onTextMessage(Context context, XGPushTextMessage message) {
// TODO Auto-generated method stub
String text = "收到消息:" + message.toString();
// 获取自定义key-value
String customContent = message.getCustomContent();
if (customContent != null && customContent.length() != 0) {
try {
JSONObject obj = new JSONObject(customContent);
// key1为前台配置的key
if (!obj.isNull("key")) {
String value = obj.getString("key");
Log.d(LogTag, "get custom value:" + value);
}
// ...
} catch (JSONException e) {
e.printStackTrace();
}
}
Log.d("LC", "++++++++++++++++透传消息");
// APP自主处理消息的过程...
Log.d(LogTag, text);
show(context, text);
}
}
```
- 产品简介
- 快速上手
- Step 1 安装部署
- Step 2 激活系统创建项目
- Step 3 开启您的分析旅程
- 1. 集成 SDK
- 2. 可视化埋点
- 3. 创建分析模型
- 附:埋点方案设计
- 附:数据分析思路
- 产品更新日志
- V5.5 新增LTV分析功能等
- V5.3 UI 升级、分布分析重构、维度表动态更新、细节优化等
- V5.2 新增归因分析、消息中心、重构埋点方案、优化看数据体验……
- V5.1.0317 体验优化& Bug修复
- V5.1 升级可视化埋点、增强权限控制……
- Part I 产品功能说明
- 名词解释
- 指标说明
- 看板
- 5.3.3 看板 UI 重构
- 分析
- 事件分析
- 渠道分析
- 渠道相关名词解释
- 来源识别规则
- 搜索引擎
- 社交媒体
- 小程序场景值
- Session 分析
- Session 规则
- 实时分析
- 留存分析
- 转化漏斗
- 智能路径
- 归因分析
- 热图分析
- Web/H5 热图
- APP 热图
- 分布分析
- 间隔分析
- 属性分析
- LTV 分析
- 多主体分析
- 自定义查询
- 用户
- 用户分群
- 用户探查
- 用户标签
- 标签体系应用概览
- 标签体系
- 标签生命周期管理
- 标签加工
- 如何自定义SQL创建标签
- 单用户档案
- 运营
- 广告跟踪
- 微信小程序渠道追踪
- 预置广告媒介和渠道
- App 推广监测(Beta版本)
- 电子邮件(即将下线)
- 短信(即将下线)
- 消息通知(即将下线)
- 项目管理
- 项目概览
- 项目角色管理
- 项目成员管理
- 数据接入管理
- 埋点方案
- 可视化埋点
- 集成SDK接入数据
- 数据验证
- 用户数据导入
- 微信小程序全埋点事件定义
- 元数据管理
- 元事件
- 虚拟事件
- 事件属性
- 用户属性
- Session 管理
- 页面组管理
- 维度表
- 服务集成配置
- 监控告警
- 智能监控
- 自定义监控
- 平台管理
- 企业概览
- 项目管理
- 成员管理
- 安全设置
- 企业设置
- 日志管理
- 帐号设置
- Part II 技术文档
- 技术接入准备工作
- 部署环境检测工具
- 数据模型
- 数据格式
- 预置事件和属性
- App预置事件/属性
- JS 预置事件/属性
- 如何准确识别用户
- 如何设计埋点方案
- 分平台上报数据 vs 跨平台打通
- SDK 指南
- Android SDK
- 快速集成
- 全埋点模块
- 消息推送模块
- Android Hybrid模式
- SDK Gradle集成方式
- 多渠道打包
- 易观小工具
- 合规相关
- iOS SDK
- 快速集成
- 全埋点介绍
- iOS Hybrid模式
- 消息推送模块
- JS SDK
- 快速集成
- JS SDK基础版
- JS SDK插件
- uni-app SDK
- 快速集成
- 打包原生APP
- 开启移动端全埋点
- uni-app SDK标准版
- 微信小程序 SDK
- 快速集成
- 微信小程序标准版
- 微信小程序插件版
- 微信小程序通用框架版
- 支付宝小程序 SDK
- 支付宝小程序标准版
- 支付宝小程序通用框架版
- 字节跳动小程序 SDK
- 字节跳动小程序标准版
- 字节跳动小程序通用框架版
- 百度小程序 SDK
- 百度小程序标准版
- 百度小程序通用框架版
- 钉钉小程序 SDK
- 钉钉小程序标准版
- 钉钉小程序通用框架版
- QQ小程序 SDK
- QQ小程序标准版
- QQ小程序通用框架版
- 快应用 SDK
- 华为WeCode小程序
- WeCode SDK 标准版
- WeCode SDK插件
- PhoneGap SDK
- mPaaS SDK
- ReactNative SDK
- Flutter SDK
- Java SDK
- Python SDK
- PHP SDK
- C++ SDK
- C# SDK
- Node JS SDK
- Lua SDK
- Golang SDK
- SDK FAQ
- identify与alias的区别
- 爬虫数据如何识别?
- 页面停留如何获取时间?
- 如果获取SDK及更新日志
- 代码埋点和无埋点有什么区别
- Web页面中发现丢失某一个事件
- 自研 SDK 注意事项
- 页面时长统计功能
- 飞书小程序 SDK
- 飞书小程序标准版
- 飞书小程序通用框架版
- Unreal Engine SDK
- 数据验证
- 客户端埋点验证
- Debug 数据验证
- 数据入库验证
- 数据导入
- 接口导入
- JAVA工具包
- 标准json文件导入
- csv格式导入
- 数据导入FAQ
- 数据导出
- JAVA工具包
- 事件数据导出
- 用户数据导出
- 直接从Kafka中消费数据
- 使用程序访问数据库
- 脚本工具
- API
- 分析API
- 事件分析
- 留存分析
- 自定义查询
- 转化漏斗
- 属性分析
- Session分析
- 渠道分析
- 分布分析
- 用户API
- 分群查询
- 用户档案
- 分群管理
- 管理API
- 权限管理
- 元数据管理
- 埋点方案管理
- 维度表管理
- 运营API
- 广告跟踪
- APP推广监测
- 平台管理API
- 项目管理
- 成员管理
- 第三方登录
- OAuth2.0登录
- LDAP登录
- GDPR 合规
- Part III 常见问题
- License 许可
- 产品试用及采购
- 参与贡献