社交分享关系链统计
1. 功能简介
社交分享邀请关系的基本逻辑图如下:
详细功能介绍请参考文档社交分享关系链统计
2. 客户端集成
首先参考接入指南集成U-Share Android SDK,要求在7.1.4版本及以上
2.1 接口导入
API接口类导入方式,代码:
import com.umeng.socialize.tracker.TrackerManager;
import com.umeng.socialize.tracker.TrackerResultHandler;如上所述,在生成RootTrackCode时,需要入参一个umeng_id,SDK提供了获取该ID的方法,获取接口: getUMID
/**
* 获取UMID接口,UMID由友盟后端分配并下发,可能因为API调用时机过早或者网络问题,导致获取不到有效UMID。
* 调用端需要判断返回值是否为null,返回值不为null即为有效UMID值。
* @param context
* @return 非空字符串-有效UMID;null-未获取到UMID
*/
public static String getUMID(Context context)参数 | 参数类型 | 参数含义 |
|---|---|---|
context | Context | 宿主App的ApplicationContext上下文,必须传入,不能传null。 |
获取umeng_id的实例:
import com.umeng.socialize.tracker.TrackerManager;
//...
// 获取UMID例子
Context appContext = this.getApplicationContext();
String umid = TrackerManager.getUMID(appContext);
if (TextUtils.isEmpty(umid)) {
Toast.makeText(appContext,"UMID获取失败,请稍后重试!", Toast.LENGTH_LONG).show();
return;
}
//...2.2 调用接口
接下来即可获取RootTrackCode,生成接口: requestTrackerCode:
/**
* Root Track Code 生成接口,并根据生成结果回调TrackerResultHandler接口对应方法。
* 成功获取到root track code之后,发起分享时需要将此code作为参数um_rtc的值附加到分享的目标链接最后。
* @param context 宿主App的ApplicationContext对象。必须传入应用ApplicationContext上下文对象。
* @param appkey 友盟平台申请的宿主App对应appkey。必须传入,不能为空串或者null。
* @param umid 此参数通过getUMID接口获取。必须传入有效umid,不能传入空串或者null。
* @param url 分享url,必选参数,不能传入空串或者null。
* @param 用户账号,可选参数,可以传入null或者空串。
* @param attribute 自定义属性,如果没有可以传null。如果传入,属性个数不能超过10个。
* @param callback 生成root track code的结果回调对象,必须传入,不能为null。
*/
public static void requestTrackerCode(Context context,
String appkey,
String umid,
String url,
String uid,
Map<String, String> attribute,
final TrackerResultHandler callback)参数 | 参数类型 | 参数含义 |
|---|---|---|
context | Context | 宿主App的ApplicationContext上下文,必须传入,不能传null。 |
appkey | String | 友盟平台申请的宿主App对应appkey。必须传入,不能为空串或者null。 |
umid | String | 此参数通过getUMID接口获取。必须传入有效umid,不能传入空串或者null。 |
url | String | 分享url,必须传入,不能为空串或者null。 |
uid | String | 用户账号,可选参数,可以传入null或者空串。 |
attribute | Map | 自定义属性(字符串键值对),存放开发者自定义属性(如用户账号,设备信息,活动ID等信息)。如果没有可以传null。开发者最多可以传入10个自定义属性,属性key字符长度不能超过16个字符,属性value字符长度不能超过64个字符,属性value不能为null或者空字符串。key或者value超出长度限制的属性会被SDK忽略。value为null或者空字符串的属性也会被SDK忽略。 |
callback | TrackerResultHandler | 生成root track code的结果回调对象,必须传入,不能传null。此结果回调上下文为SDK内部网络请求后台工作线程,如果需要在回调方法中操作UI控件,请通过UI线程Handler执行相关操作。注意:当传入的appkey、umid、url、callback参数非法时,或者传入的自定义属性个数超出10个限制时,SDK不会调用callback回调接口。此时请通过tag “UMLog”查看相关报错日志来解决参数传入错误。当传入的各参数合法时,SDK保证一定会回调callback接口的成功或者失败回调方法。 |
其中callback的回调接口TrackerResultHandler定义如下:
package com.umeng.socialize.tracker;
public interface TrackerResultHandler {
// 本方法在Root Track Code生成成功时回传完整code内容。
void codeGenerateSuccess(String rootTrackCode);
// Root Track Code生成失败时回调此方法,可通过t.getMessage获取失败原因。
void codeGenerateFailed(Throwable t);
}2.3 接口返回
code 为200是正常返回,其余为异常返回,异常信息在msg 字段
未捕获异常code 为10000 , 默认msg 为服务器偷懒```java正常返回:{ “code”: 200, #返回码 “msg”: “SUCCESS”, #返回提示 “sCode”: 200, “sMsg”: “SUCCESS”, “data”: {
"rootTrackCode": "f528a53ff689130b41e3153j"}, “traceId”: “0af4000116058653151041092d5089”, “success”: true}异常返回:{ “code”: 20002, # 异常返回码 “msg”: “APPKEY不存在”, #异常原因 “sCode”: 20002, “sMsg”: “APPKEY不存在”, “data”: null, “traceId”: “ac11000116087092972151004d6b7a”, “success”: false}
<br />所有已定义异常码及异常原因:
```java
REQUEST_PARAMMETER_INVALID(400L, "请求参数校验失败"),
INIT_MAP_ERROR(20001L, "初始参数未设置"),
APPKEY_NONEXISTENT(20002L, "APPKEY不存在"),
UMID_NONEXISTENT(20003L, "UMID不存在"),
URL_NONEXISTENT(20007L, "URL不存在"),
USER_DATA_EXCEEDED(20004L, "用户自定义参数个数超过限制"),
INVALID_PARAM_KEY(20005L, "用户自定义参数KEY非法"),
INVALID_PARAM_LENGTH(20006L, "用户自定义参数长度超限"),
INVALID_TRACK_CODE(20015L, "无效的TRACKCODE"),
SERVER_INTERNAL_ERROR(20020L, "服务器内部错误"),2.4 完整示例
import com.umeng.socialize.tracker.TrackerManager;
import com.umeng.socialize.tracker.TrackerResultHandler;
//...
final String webUrl = "http://mobile.umeng.com/social";
Context appContext = this.getApplicationContext();
String umid = TrackerManager.getUMID(appContext);
if (TextUtils.isEmpty(umid)) {
Toast.makeText(appContext,"UMID获取失败,请稍后重试!", Toast.LENGTH_LONG).show();
return;
}
// 生成root track code
TrackerManager.requestTrackerCode(
appContext,
"5a12384aa40fa3551f0001d1",
umid, webUrl, "1235681", customParam,
new TrackerResultHandler() {
@Override
public void codeGenerateSuccess(final String content) {
if (mainThreadHandler != null) {
mainThreadHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(appContext,"获取rootTrackCode 成功了。", Toast.LENGTH_LONG).show();
// 获取到root track code之后,发起分享时需要将此code作为参数um_rtc的值附加到分享的目标链接最后。
String newWebUrl = webUrl + "?um_rtc=" + content;
UMWeb rootTrackWeb = new UMWeb(newWebUrl);
rootTrackWeb.setTitle("Web title with root track code.");
rootTrackWeb.setThumb(new UMImage(ShareDetailActivity.this, R.drawable.thumb ));
rootTrackWeb.setDescription("root track code sample.");
new ShareAction(ShareDetailActivity.this)
.withMedia(rootTrackWeb)
.setPlatform(share_media)
.setCallback(shareListener).share();
}
});
}
}
@Override
public void codeGenerateFailed(Throwable t) {
if (mainThreadHandler != null) {
final String errorMsg = t.getMessage();
mainThreadHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(appContext,"获取rootTrackCode 失败了: " + errorMsg, Toast.LENGTH_LONG).show();
// 获取root track code失败,直接分享目标链接
UMWeb web = new UMWeb(webUrl);
web.setTitle("This is web title");
web.setThumb(new UMImage(this,R.drawable.thumb ));
web.setDescription("my description");
new ShareAction(ShareDetailActivity.this)
.withMedia(web)
.setPlatform(share_media)
.setCallback(shareListener).share();
}
});
}
}
});2.5 常见问题
如果设备不能获取到Root Trackcode,那么请参考此FAQ:Root Trackcode获取失败
剩余接入过程请参考文档