跳转到主要内容
PRODUCT DOCUMENTS

快速找到所需文档,高效完成接入与排障

浏览产品文档与友盟 Skill,展开目录并阅读正文。

社交分享关系链统计

1. 功能简介

社交分享邀请关系的基本逻辑图如下:未命名文件2 (3).png详细功能介绍请参考文档社交分享关系链统计

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 接口返回

  1. code 为200是正常返回,其余为异常返回,异常信息在msg 字段

  2. 未捕获异常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获取失败

剩余接入过程请参考文档