跳转到主要内容
PRODUCT DOCUMENTS

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

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

接入集成

如果您希望将H5页面从app分享到微信等平台,实现从app——>微信——>app的分享场闭环链路,可以集成U-Share的SDK集成,即可拥有社交分享加授权登录能力

一、接入SDK

1.获取SDK

1.1 手动集成

请在压缩包里解压智能超链SDK

解压将会拿到相关的common包以及link包。image.png

2.集成 SDK

当您下载了U-Link SDK后,就可以开始集成了。common包的集成文档请参考官网的U-App集成文档

集成后需要再对App工程进行U-Link相关功能的处理

3 初始化 SDK

请参考合规指南,然后进行初始化U-Link SDK,请参考通用初始化接口

初始化时appkey请填写后台应用的appkey

4 混淆设置

请参考U-App集成文档添加混淆配置

二、唤起App并获取参数

当您在U-Link后台【设置-Deeplink配置】页面填写完基础参数,并且在【分析-裂变营销】页面配置完跳转页面path和kv参数后,您还要在自己App里进行代码处理,使得App能够解析这些参数并且能够跳转到相应的页面。

1. 注册Scheme

image.pngScheme为一个标示App的字符,详细介绍请参考Scheme的介绍,请在您的App代码工程的AndroidManifest.xml配置您在后台填写的Scheme参数,这样JSSDK才能通过Scheme唤起您的App。如下示例中的Scheme为mobclick,配置完成后,请参考第3步,在MainActivity中进行其他相关处理。

<activity
            android:name=".MainActivity"
            android:launchMode="singleTask"
            android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="mobclick"/>
</intent-filter>
</activity>

推荐将Scheme配置在App首启动界面,但如开发者希望拉起App其他页面,也可以配置在App其它界面

2. 启动或安装参数

接下来我们需要处理配置参数,以实现app跳转到指定页面等功能,总体分为两种场景:

  • 第一是启动,APP被H5页面通过U-Link方式拉起后,您需要处理通过URL cheme方式传进来的跳转页面path和kv,完成页面跳转。

  • 第二是安装,APP被H5页面引导新安装后,通过getInstallParams和wakeupurl获得配置的新装参数和跳转链接(包含跳转页面path和自定义kv),APP拿到配置的新装参数后可按需处理,APP拿到跳转链接后可类似上面第一部分解析出跳转页面path和kv,完成页面跳转。

详细处理方法请看下方文档image.png

3. 处理传进来的URL

请在MainActivity的onCreate函数中增加如下代码,getIntent().getData()为传递进来的页面,umlinkAdapter为UMLinkListener类型的回调函数,可参考第6条的说明。

MobclickLink.handleUMLinkURI(this, getIntent().getData(), umlinkAdapter);

4. App后台存活时

当App还在后台活跃,并未完全关闭时,这种情况需要在MainActivity中增加或修改onNewIntent函数,否则无法截获传递进来的URL。

@Override
protectedvoid onNewIntent(Intent intent){
super.onNewIntent(intent);
Uri uri = intent.getData();
// 此处要调用,否则App在后台运行时,会无法截获
MobclickLink.handleUMLinkURI(this, intent.getData(), umlinkAdapter);
}

5. 获取新安装App参数

用户首次安装App,打开App时需要调取如下接口(非首次安装不用调用),调取此接口后服务端会进行模糊匹配,模糊匹配成功后App就可以获取到新安装参数 。

说明

1.此接口必须要等到用户同意隐私政策之后再延迟1~2秒调取,

目的是排除因网络延迟问题,造成模糊匹配失败

2.U-Link v1.2.0 SDK及以后,支持跨端打通模糊匹配技术,突破传统IP和剪切板模糊匹配的缺点,提升成功获取新安装参数的概率。跨端打通模糊匹配技术说明

3.U-Link v1.1.0 SDK及以后,支持剪切板模糊匹配技术,以提高成功获取新安装参数的概率,涉及到剪切板读和写功能,请仔细阅读剪切板使用说明文档。如不希望使用剪切板功能,则调取下方新版接口将clipBoardEnabled设置为false即可,我们会通过IP或者跨端打通技术进行模糊匹配

//以下两个接口任选其一即可
   //旧版接口,默认读剪切板
        MobclickLink.getInstallParams(this, umlinkAdapter);

   //新版接口,将clipBoardEnabled设置为false,SDK不会读剪切板;设置为true会读剪切板
        public static void getInstallParams(Context context, boolean clipBoardEnabled, UMLinkListener listener)

调取此接口,如果模糊匹配成功,您能够获取到installParams和URL两个参数,

installParams:您在U-Link后台裂变营销页创建活动时填写的固定【首次安装传参】参数,此参数不是动态的

image.png

URL:服务端拼接的wakeupurl,格式大致是scheme://拼接域名/App跳转path?App跳转参数kv&JSSDK自定义参数kv&linkid=xxx等等,wakeupurl里包含了后台填写的固定页面跳转参数和您在H5 JSSDK里携带的自定义参数。即URL里包含了JSSDK传递的data自定义参数。

您可以用

第6步里的: MobclickLink.handleUMLinkURI(mContext, uri, umlinkAdapter)从URL里解析出传递的自定义参数

自定义

当您调取此接口不能获取到任何参数时,可以参考这个FAQ

重要

getInstallParams一般建议在应用新安装后第一次启动时调用,而不需要应用每次启动时都调用,具体可参考我们的demo示例代码。SDK会把getInstallParams获得的数据缓存在本地,APP以后再需要的时候也可以再次调用getInstallParams获得,此时不会再走模糊匹配的逻辑。可是如果用户把App卸载了,那么用户自行重装的时候服务端会再次进行模糊匹配

6.实现umlinkAdapter回调函数

该回调函数包含三个方法:

  1. onLink:对跳转App的处理,唤起已安装App会走这个回调,可以接收到开发者在U-Link后台设置页配置的Path、App页面传参以及在JSSDK传递的data自定义参数,开发者可以根据这些信息处理后续逻辑,例如唤起App时跳转到App指定页面

  2. onInstall:为获取新装参数的处理,App首次安装启动时,开发者调取getInstallParams新安装参数接口会走这个回调,此处返回两个参数,一个是开发者在后台填写的首次安装传参install_params,另一个是服务端拼接的wakeup url,包含了JSSDK传递的data自定义参数。

    开发者可以用

    MobclickLink.handleUMLinkURI(mContext, uri, umlinkAdapter)从URL里解析出传递的自定义参数。根据这些信息可以处理后续逻辑,例如安装启动App时跳转到App指定页面、携带参数安装、绑定邀请关系

3. onError:发生网络错误或者超时情况的回调

UMLinkListener umlinkAdapter =newUMLinkListener(){
  @Override
   publicvoid onLink(String path,HashMap<String,String> query_params){
   if(!path.isEmpty()){
       //此处获得path即为后台配置的页面path
    }
   if(!query_params.isEmpty()){
      //此处获得query_params即为后台配置的页面启动唤起的参数kv键值对
    }
     //针对path和query_params做页面跳转等处理
    }

  @Override
  publicvoid onInstall(HashMap<String,String> install_params,Uri uri){
  if(install_params.isEmpty()&& uri.toString().isEmpty()){
      //没有匹配到新装参数,示例弹框
                AlertDialog.Builder builder =newAlertDialog.Builder(mContext);
                builder.setMessage("没有匹配到新装参数");
                builder.setNegativeButton("OK",newDialogInterface.OnClickListener(){
     publicvoid onClick(DialogInterface dialog,int whichButton){
       }
      });
                builder.show();
      }
    else{
  if(!install_params.isEmpty()){
      //此处获得install_params即为配置的新装参数kv键值对
     }
   if(!uri.toString().isEmpty()){
     //可将uri交给handleUMLinkURI处理,回调至onLink
   MobclickLink.handleUMLinkURI(mContext, uri, umlinkAdapter);
     }
   }
}

 @Override
 publicvoid onError(String error){
     //发生网络错误或超时等异常,示例弹框
 AlertDialog.Builder builder =newAlertDialog.Builder(mContext);
            builder.setMessage(error);
            builder.setNegativeButton("OK",newDialogInterface.OnClickListener(){
            publicvoid onClick(DialogInterface dialog,int whichButton){
   }
   });
            builder.show();
  }
};

U-Link集成文档介绍完毕,完成后请在测试设备上测试Deeplink拉起功能是否正常,以及在概况页查看U-Link相关指标数据是否正常

如果您希望统计出H5带来的新老用户,后续在App里的留存率/注册/付费等情况,可以参考统计App后续的留存率/注册/付费等数据

如果您希望实现老带新完整链路奖励和分享邀请KOL用户统计,可以参考社交分享关系链统计功能文档

常见问题

  1. 不能打开APP

  2. 不能获取安装参数

  3. 安装参数可以一直获取

  4. 如何统计到拉新用户/模糊匹配原理是什么

  5. 如何实现免邀请码安装

  6. 应用首次启动时Deeplink没有回调,杀死app进程有回调

  7. onLink回调和onInstall回调区别

  8. 活动触发次数统计规则

  9. App启动次数为0

三、配置Deeplink链接

1. DeepLink 技术简介

DeepLink(深度链接)是一种通过特定 URI 直接打开 Android 应用并跳转至指定页面的技术。它允许从 Web 页面、其他应用或广告中直接唤起目标 App,并传递参数,从而提升用户体验和转化率。

典型应用场景包括:

  • 电商类 App:点击商品分享链接,直接跳转到 App 内的商品详情页;

  • 资讯类 App:点击新闻链接,进入 App 内对应文章页面;

  • 游戏类 App:通过邀请链接加入指定房间或队伍;

  • 广告引流:社交平台广告点击后直达 App 内活动页;

  • 拉新活动:老用户分享 H5 链接,新用户点击后跳转至注册或领取奖励页面;

  • 沉默用户唤醒:通过推送含 DeepLink 的通知,引导用户回到特定功能页面。

2. Android DeepLink 原理

DeepLink 的核心机制是利用 URI 的 scheme 协议,由操作系统解析并匹配已注册该 scheme 的应用,进而启动对应 Activity 并传递数据。

URI 示例: myapp://test/spec?param1=p1&param2=p2

关键组成部分:

  • scheme:协议名称,如 myapp 或 https;

  • host:主机地址;

  • port:端口号(可选);

  • path / pathPrefix:路径匹配规则;

系统根据 <intent-filter> 中的配置识别可响应的 Activity。

3. Android Manifest 配置

在 AndroidManifest.xml 中为需要响应 DeepLink 的 Activity 添加 intent-filter:

<activity android:name=".DeepLinkActivity">
    <intent-filter>
        <data
            android:scheme="myapp"
            android:host="test"
            android:pathPrefix="/spec" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

说明:

  • android:scheme:自定义协议,如 myapp;

  • android:host 和 path 用于精确匹配 URI 路径;

  • BROWSABLE 类别确保浏览器可触发;

  • DEFAULT 类别允许隐式 Intent 匹配。

4. 接收并处理 DeepLink 数据

当用户点击 DeepLink 后,系统会启动注册了对应 intent-filter 的 Activity。开发者需要在该 Activity 中解析传入的 Intent 数据。

1)获取 DeepLink URI

在目标 Activity 的 onCreate() 或 onNewIntent() 方法中获取原始 URI:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_deeplink);

    handleDeepLink(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);

    handleDeepLink(intent);
}

2)解析 URI 参数

private void handleDeepLink(Intent intent) {
    Uri data = intent.getData();
    if (data != null) {
        String scheme = data.getScheme();     // myapp
        String host = data.getHost();         // test
        String path = data.getPath();         // /spec
        String param1 = data.getQueryParameter("param1"); // p1

        Log.d("DeepLink", "Scheme: " + scheme);
        Log.d("DeepLink", "Host: " + host);
        Log.d("DeepLink", "Path: " + path);
        Log.d("DeepLink", "Param1: " + param1);

        // 根据 path 或参数跳转到不同页面
        navigate(path, param1);
    } else {
        Log.w("DeepLink", "No data found in intent.");
    }
}

3)根据 DeepLink 内容进行页面跳转

private void navigate(String path, String params) {
    if ("/spec".equals(path)) {
        Intent target = new Intent(this, DetailActivity.class);
        target.putExtra("param1", params);
        startActivity(target);
    } else if ("/news".equals(path)) {
        Intent target = new Intent(this, NewsActivity.class);
        target.putExtra("param1", params);
        startActivity(target);
    } else {
        startActivity(new Intent(this, MainActivity.class));
    }
    ...
}

5. 延迟深度链接(Deferred DeepLink)

延迟深度链接(Deferred DeepLinking)指当用户未安装 App 时,点击链接先跳转至应用商店或浏览器下载,安装后首次打开时仍能获取原始链接参数,实现“安装后跳转”。

实现方式

  • 使用第三方服务(如 U-Link、Firebase Dynamic Links等)记录用户点击行为;

  • 安装后通过设备指纹或归因分析还原原始链接上下文;

  • 开发者在 App 启动时获取参数并跳转至目标页面。

适用于拉新、裂变、广告归因等场景

6. 测试 DeepLink 是否生效

方法一:本地 HTML 测试

创建一个测试 HTML 文件:

<!DOCTYPE html>
<html>
<head><title>Test Deeplink</title></head>
<body>
  <a href="myapp://test/spec?param1=123">点击打开应用</a><br/>
</body>
</html>

部署到本地服务器或将文件发送到手机,用浏览器打开测试。

方法二:ADB 命令测试

adb shell am start -W -a android.intent.action.VIEW \
    -d "myapp://test/spec?param1=123" com.example.app

观察是否成功启动 App 并跳转。

7. 最佳实践与注意事项

  • 避免多个 Activity 注册相同 scheme+host,防止系统弹出选择框;

  • 记录 DeepLink 打点日志,用于数据分析与归因;

  • 考虑降级处理:若无法处理 DeepLink,应引导用户至首页或提示错误;

  • 注意安全:不要信任外部传入的参数,防止 XSS 或非法跳转。