跳转到主要内容
PRODUCT DOCUMENTS

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

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

Android SDK 归因接口使用说明

归因 API 使用说明

概述

归因模块提供的核心能力:

能力

API

场景

延迟深链还原

getInstallParams()

新安装用户首次启动 App,还原安装前点击的广告链接参数

拉活传参归因上报

handleOpenURL()

已安装用户通过 DeepLink 被拉活时,解析链接参数并上报归因

剪切板归因

handlePasteboardURL(Context, String)

读取 OneLink 写入剪切板的内容,解析深链参数并触发归因上报

获取归因结果

setOnAttributionListener(OnAttributionListener)

SDK 初始化后自动查询服务端归因结果,并通过监听器返回最终结果

包路径: com.umeng.commonsdk.deeplink


快速接入

1. 初始化(在 Application.onCreate 中)

import com.umeng.commonsdk.deeplink.UMCommonDeepLink;
import com.umeng.commonsdk.deeplink.UMCommonDeepLinkCallback;

// 注册 handleOpenURL 回调(可选,仅拉活场景需要)
UMCommonDeepLink.getInstance().setCallback(new UMCommonDeepLinkCallback() {
    @Override
    public void onResolveDeepLink(Map<String, Object> params) {
        // params 包含:
        //   "install_params" → Map<String, String> (URL query 参数)
        //   "install_path"   → String (URL path)
        Log.d("DeepLink", "拉活参数: " + params);
    }
}, null); // handler 传 null 表示回调到主线程

2. 拉活传参(在 Activity.onCreate / onNewIntent 中)

import com.umeng.commonsdk.deeplink.UMCommonDeepLink;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 从 Intent 中获取拉活 URI
    Uri uri = getIntent().getData();
    if (uri != null) {
        boolean handled = UMCommonDeepLink.getInstance().handleOpenURL(this, uri);
        // handled=true 表示 URL 中包含归因参数,已触发回调和上报
    }
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Uri uri = intent.getData();
    if (uri != null) {
        UMCommonDeepLink.getInstance().handleOpenURL(this, uri);
    }
}

3. DDL 延迟深链还原

import com.umeng.commonsdk.deeplink.UMCommonDeepLink;
import com.umeng.commonsdk.deeplink.InstallParamsCallback;

UMCommonDeepLink.getInstance().getInstallParams(this, null, new InstallParamsCallback() {
    @Override
    public void onSuccess(Map<String, Object> params) {
        // params 包含:
        //   "install_params" → Map<String, String> (服务端返回的安装归因参数)
        //   "install_path"   → String (广告目标页路径)
        String targetPath = (String) params.get("install_path");
        Log.d("DeepLink", "DDL 还原成功, targetPath=" + targetPath);
    }

    @Override
    public void onFailure(int errorCode, String errorMsg) {
        // errorCode: -1~-5,详见"错误码"章节
        Log.w("DeepLink", "DDL 失败: code=" + errorCode + ", msg=" + errorMsg);
    }
});

4. 剪切板归因

请在 UMConfigure.init() 完成后读取剪切板内容,并将读取结果传给 handlePasteboardURL()。SDK 不会主动读取系统剪切板。如需获取解析后的深链参数,请沿用前文方式提前调用 setCallback()。

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;

import com.umeng.commonsdk.deeplink.UMCommonDeepLink;

ClipboardManager clipboard =
        (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

if (clipboard != null && clipboard.hasPrimaryClip()) {
    ClipData clipData = clipboard.getPrimaryClip();
    if (clipData != null && clipData.getItemCount() > 0) {
        CharSequence text = clipData.getItemAt(0).getText();
        if (text != null) {
            boolean handled = UMCommonDeepLink.getInstance()
                    .handlePasteboardURL(this, text.toString().trim());
            if (handled) {
                // 内容已进入归因处理流程
            }
        }
    }
}

剪切板归因与 handleOpenURL() 共用通过 setCallback() 注册的 UMCommonDeepLinkCallback。已注册回调时,识别成功后 SDK 会通过指定的 Handler 投递 onResolveDeepLink();Handler 传 null 时在主线程回调:

import com.umeng.commonsdk.deeplink.UMCommonDeepLinkCallback;
import java.util.Map;

UMCommonDeepLink.getInstance().setCallback(new UMCommonDeepLinkCallback() {
    @Override
    public void onResolveDeepLink(Map<String, Object> params) {
        Map<String, String> queryParams =
                (Map<String, String>) params.get("install_params");
        String path = (String) params.get("install_path");
        navigateToPage(path, queryParams);
    }
}, null);

5. 获取归因结果

请在主进程的 Application.onCreate() 中、调用 UMConfigure.init() 之前注册归因结果监听器。SDK 初始化完成后会自动查询服务端归因结果。

import com.umeng.commonsdk.UMConfigure;
import com.umeng.commonsdk.deeplink.OnAttributionListener;

import android.util.Log;
import org.json.JSONObject;

UMConfigure.setOnAttributionListener(new OnAttributionListener() {
    @Override
    public void onAttributionSuccess(JSONObject attribution) {
        // 归因查询成功,attribution 为服务端返回的归因结果
        Log.d("Attribution", "归因结果: " + attribution);
    }

    @Override
    public void onAttributionFail(int errorCode) {
        // 当前 errorCode 为 -1,表示未获得有效归因结果
        Log.w("Attribution", "归因查询失败: " + errorCode);
    }
});

UMConfigure.init(this, "YOUR_APPKEY", "channel",
        UMConfigure.DEVICE_TYPE_PHONE, null);

API 详细说明

UMCommonDeepLink

门面单例类,通过 UMCommonDeepLink.getInstance() 获取实例。

getInstance()

public static UMCommonDeepLink getInstance()

setCallback(callback, handler)

public void setCallback(UMCommonDeepLinkCallback callback, Handler handler)

注册 handleOpenURL 的全局回调。

参数

类型

说明

callback

UMCommonDeepLinkCallback

回调接口实例

handler

Handler

指定回调线程;传 null 默认主线程

注意: 建议在 UMConfigure.preInit() 之后尽早调用,确保拉活时回调已注册。


getInstallParams(ctx, handler, callback)

public void getInstallParams(Context ctx, Handler handler, InstallParamsCallback callback)

向服务端请求 DDL(Deferred Deep Link)安装归因参数。

参数

类型

说明

ctx

Context

上下文(内部自动取 applicationContext)

handler

Handler

指定回调线程;传 null 默认在主线程中回调

callback

InstallParamsCallback

结果回调


handleOpenURL(ctx, uri) / handleOpenURL(ctx, url)

public boolean handleOpenURL(Context ctx, Uri uri)
public boolean handleOpenURL(Context ctx, String url)

解析拉活 URL,检测 _umlnk_refid 参数触发归因回调和上报。

参数

类型

说明

ctx

Context

上下文

uri / url

Uri / String

拉活传入的 URL

返回值: true 表示有效URL且已处理;false 表示无归因参数,不做处理。


handlePasteboardURL(ctx, urlString)

public boolean handlePasteboardURL(Context ctx, String urlString)

处理从系统剪切板读取到的 OneLink内容。调用前须完成 UMConfigure.init();如需接收参数回调,应提前通过 setCallback() 注册回调。SDK 只处理有效内容,普通文本或明文 URL 不会被处理。

参数

类型

说明

ctx

Context

Android 上下文,接口内部使用 applicationContext

urlString

String

从系统剪切板读取到的 OneLink 加密字符串

返回 true 表示内容有效,SDK 已进入归因处理流程;已注册回调时会投递解析结果。返回 false 表示内容无效。返回 true 仅代表 SDK 已受理,不代表服务端最终归因成功。

注意事项补充

SDK 不会主动读取剪切板,读取时机与隐私合规由应用自行控制。建议在用户同意隐私授权后、应用处于前台且存在明确业务场景时读取;Android 10 及以上系统对后台应用读取剪切板有限制。接口不对重复调用去重,同一剪切板内容应避免重复提交。


setOnAttributionListener(listener)

public static void setOnAttributionListener(OnAttributionListener listener)

注册安装归因结果监听器。建议在 SDK 初始化前调用,确保首次初始化时自动发起归因查询。

参数

类型

说明

listener

OnAttributionListener

归因结果监听器;传 null 可取消注册,重复注册时后注册的监听器覆盖先前注册

OnAttributionListener

public interface OnAttributionListener {
    void onAttributionSuccess(JSONObject attribution);
    void onAttributionFail(int errorCode);
}

回调

说明

onAttributionSuccess(JSONObject attribution)

归因查询成功;返回服务端归因结果 JSON

onAttributionFail(int errorCode)

未获得有效归因结果

成功结果可能包含 appkey、umid、channel、attributionId、attributionType、strategy、attributionTime 等字段,实际字段及取值以服务端返回为准。所有回调均异步投递到主线程。


UMCommonDeepLinkCallback

public interface UMCommonDeepLinkCallback {
    void onResolveDeepLink(Map<String, Object> params);
}

handleOpenURL 命中归因参数时的回调接口。handleOpenURL未命中归因返回false则不会回调。

params 字段说明:

Key

类型

说明

install_params

Map<String, String>

URL 中所有 query 参数的键值对

install_path

String

URL 的 path 部分(如 /product/123)


InstallParamsCallback

public interface InstallParamsCallback {
    void onSuccess(Map<String, Object> params);
    void onFailure(int errorCode, String errorMsg);
}

getInstallParams 的结果回调接口。

onSuccess params 字段说明:

Key

类型

说明

install_params

Map<String, String>

服务端返回的安装归因参数

install_path

String

广告目标页路径


错误码

常量名

值

说明

ERROR_SERVER_MATCHING_FAILED

-1

服务端匹配失败

ERROR_ZERO_NOT_READY

-2

SDK 初始化未就绪

ERROR_INTERNAL

-3

内部错误

ERROR_NETWORK

-4

网络错误

ERROR_TIMEOUT

-5

SDK 初始化等待超时


完整接入示例

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // 1. 友盟SDK预初始化, appkey参数和渠道channel参数请替换为您自己的设定值
        UMConfigure.preInit(this, "YOUR_APPKEY", "channel");

    
        // 2. 注册 DeepLink 回调
        UMCommonDeepLink.getInstance().setCallback(new UMCommonDeepLinkCallback() {
            @Override
            public void onResolveDeepLink(Map<String, Object> params) {
                Map<String, String> queryParams = (Map<String, String>) params.get("install_params");
                String path = (String) params.get("install_path");
                // 根据 path 跳转对应页面
                navigateToPage(path, queryParams);
            }
        }, null);

        // 3. 友盟SDK正式初始化,正式初始化函数支持在子线程中延迟调用
        // 注意:安装后应用首次启动,正式初始化函数必须在用户同意隐私授权之后,才可以调用,否则
        // 可能导致违规采集,影响应用上架
        UMConfigure.init(this, "YOUR_APPKEY", "channel", UMConfigure.DEVICE_TYPE_PHONE, null);

        // 4. 获取安装归因参数(建议在首页 Activity 中调用)
        UMCommonDeepLink.getInstance().getInstallParams(this, null, new InstallParamsCallback() {
            @Override
            public void onSuccess(Map<String, Object> params) {
                String targetPath = (String) params.get("install_path");
                if (targetPath != null) {
                    // 跳转到广告目标页
                    navigateToPage(targetPath, (Map<String, String>) params.get("install_params"));
                }
            }

            @Override
            public void onFailure(int errorCode, String errorMsg) {
                // 非首次安装或无匹配记录,忽略即可
            }
        });
    }
}
public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 4. 处理拉活 DeepLink
        Uri uri = getIntent().getData();
        if (uri != null) {
            UMCommonDeepLink.getInstance().handleOpenURL(this, uri);
        }
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri uri = intent.getData();
        if (uri != null) {
            UMCommonDeepLink.getInstance().handleOpenURL(this, uri);
        }
    }
}

注意事项

  1. 调用时机: getInstallParams 仅需在 App 首次安装启动时调用一次,成功后结果会缓存到本地,后续重复调用直接返回缓存数据。

  2. handleOpenURL 时机: 建议在接收 DeepLink 的 Activity 的 onCreate 和 onNewIntent 中都调用,确保冷启动和热启动场景均能处理。

  3. 回调注册: setCallback 应在 handleOpenURL 之前调用,否则拉活回调会丢失。

  4. 错误处理: onFailure 中 ERROR_SERVER_MATCHING_FAILED(-1) 是正常场景(无匹配记录),无需特殊处理。