DeepLink

作者: 雷根儿 | 来源:发表于2021-12-15 17:55 被阅读0次

    DeepLink 深度链接

    什么是DeepLink

    DeepLink,又称深度链接、调起链接,是一套链接服务,用户点击链接可以跳转至 App 的特定深度页面。一般分为 DeepLink 和 Deferred DeepLink。

    DeepLink

    深度链接,指移动设备在已安装目标 App 的情况下,把特定的参数通过 url 的形式传递给 App,从而直接打开 App 的特定深度页面,实现从链接直达 App 内部页面的跳转。

    Deferred DeepLink

    延迟深度链接,指移动设备在没有安装目标 App 的情况下,用户点击链接时,引导用户前往下载安装 App,在其完成后,首次打开该 App 时自动跳转至 App 的特定深度页面。

    应用场景

    DeepLink 的应用场景众多,可用于 App 社交分享、App 沉默唤醒、App 广告引流、Web to App、应用商店 ASO 等场景。

    同时,DeepLink 也适用于外部 H5 与原生 App 的交互场景中,例如:

    • 视频类 App:点击 H5 链接直达指定视频播放页

    • 直播类 App:点击 H5 链接直达指定直播间

    • 电商类 App:点击 H5 链接直达指定商品购物页

    • 新闻类 App:点击 H5 链接直达指定资讯详情页

    • 游戏类 App:点击 H5 链接直达指定关卡、房间等

    常用调起方式

    DeepLink 常用调起方式主要有以下四种:

    常用调起方式 适用平台 调起方法及特点
    Universal Link iOS 9 及更高版本 通过 http 协议的链接直接打开 App,用户体验顺滑
    AppLinks Android 6 及更高版本 通过 http 协议的链接直接打开 App,用户体验顺滑
    scheme iOS 和 Android 所有版本 iOS 和 Android 通用的调起方式,打开前操作系统会询问是否打开目标 APP
    剪切板 可操作设备剪切板的系统版本 通过剪切板的写入及读取,实现[延迟深度链接]功能

    Scheme

    什么是 URL Scheme?

    android中的scheme是一种页面内跳转协议。

    通过定义自己的scheme协议,可以非常方便跳转app中的各个页面。

    通过scheme协议,其他应用可以定制化跳转到我们APP内部页面。

    Scheme协议在Android中使用场景

    • H5跳转到native页面

    • 客户端获取push消息中后,点击消息跳转到APP内部页面

    • APP根据URL跳转到另外一个APP指定页面

    如何使用scheme协议

    • 在Mainefest配置文件中配置需要用scheme协议跳转的Activity
    <!-- scheme协议 -->
    <activity
        android:name=".SchemeActivity"
        android:label="@string/app_name">
        <!-- 要想在别的App上能成功调起App,必须添加intent过滤器 -->
        <!-- 协议部分,随便设置 -->
        <intent-filter>
            <!--协议部分,随便设置-->
            <data android:scheme="scheme" android:host="mtime" android:path="/goodsDetail" />
            <!--下面这几行也必须得设置-->
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.BROWSABLE"/>
        </intent-filter>
    </activity>
    
    
    • data部分都有哪些属性
    <data android:host="string"
        android:mimeType="string"
        android:path="string"
        android:pathPattern="string"
        android:pathPrefix="string"
        android:port="string"
        android:scheme="string" />
    
    
    • 在java中使用通过协议跳转
    /**
     * (1)在manifest配置文件中配置了scheme参数
     * (2)网络端获取url
     * (3)跳转
     * (4)由于系统的activity栈有bug,外部相同的scheme吊起详情页后,点返回首页;再从外部用          
     *一样的scheme吊起会无法跳转详情页。因为系统认为root activity是相同的,不给启动详情  
     *页,所以只能用这个方法,修改下intent data里的数据,加个时间戳进去
     */
    String url = "scheme://mtime/goodsDetail?goodsId=10011002";
    Uri.Builder openUri = Uri.parse(url).buildUpon();
    openUri.appendQueryParameter("push_click_times",String.valueOf(System.currentTimeMillis()));
    Intent intent = new Intent(Intent.ACTION_VIEW,openUri.build());
    startActivity(intent);
    
    
    • H5跳转到native页面
    <!DOCTYPE html>
    <html>
    <body>
    <h1>Test Scheme</h1>
    <!--手动点击跳转-->
    <a href="scheme://mtime/goodsDetail?goodsId=10011002">Click</a>
    </body>
    </html> 
    
    
    • 获取scheme协议参数
    public class xxxActivity extends Activity {
        private static final String TAG = "xxxActivity";
        private TextView tvParam;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            tvParam = (TextView) findViewById(R.id.tv_param);
            Uri data = getIntent().getData();
            Log.i(TAG, "host = " + data.getHost() + " path = " + data.getPath() + " query = " + data.getQuery());
            String param = data.getQueryParameter("goodsId");
            schemeTv.setText("获取的参数为:" + param);
        }
    }
    
    

    AppLinks

    App Links是谷歌在2015年的I/O大会上宣布了一个新特性:Android M以上版本可以通过AppLinks允许开发者将app和他们的web域名关联。这一举措是为了最小化用户遇到“打开方式”对话框的概率。

    Android App Links有以下几点好处:

    • 安全性/特殊性:由于Android App Links使用了HTTP/HTTPS URL的方式向开发者的服务器进行连接认证,所以其他应用无法使用我们的链接

    • 无缝的用户体验:当用户未安装我们的应用时,由于使用的是HTTP/HTTPS URL,会直接打开一个网页,我们可以在这个网页中展示应用介绍等,而不是显示404或者是其他错误页面

    • 支持Instant Apps:可以使用App Links直接打开一个未安装的Instant App

    • 支持Google Search或其他浏览器:用户可以直接在Google Search/Google Assistant/手机浏览器/屏幕搜索中直接通过点击一个URL来打开我们的指定页面

    Android AppLink集成

    1. 创建intent filter

    Android Studio 2.3以后提供了App Links Assistant来帮助开发者快速在AndroidManifest.xml中创建需要配置的intent filter,使用App Links Assistant有以下几个步骤:

    • 点击Android Studio的菜单栏中的Tools > App Links Assistant

    • 点击Open URL Mapping Editor,然后在对话框底部点击+去添加一个新的URL mapping

    • 在弹出的Add URL Mapping对话框中输入对应的内容,包括Host、Path、Activity, 输入完成后点击OK

    image

    注:App Link 支持多个域名

    使用App Links Assistant在manifest文件中自动生成的内容如下:

    image
    1. <u>检查URL Mapping是否配置正确</u>

    App Links Assistant提供了检查URL Mapping是否配置正确的快捷方式,操作如下:

    • 点击Open URL Mapping Editor,然后在Check URL Mapping对话框中输入URL,当输入一个能够成功匹配到Acitivty的URL后,输入框下方会显示This URL maps to xxxxx(app)
    image
    1. 处理App Links进入应用的场景

    通过App Links Assistant -> Select Activity选择之前配置的URL对应的Activity, 点击Insert Code即可在onCreate方法中插入获取从App Links跳转而来的URL的代码,生成代码如下

    // ATTENTION: This was auto-generated to handle app links.
    Intent appLinkIntent = getIntent();
    String appLinkAction = appLinkIntent.getAction();
    Uri appLinkData = appLinkIntent.getData();
    
    
    1. 检查assetlinks.json是否上传成功

    • 为了在应用安装成功后,系统能自动验证该应用是否有权使用对应的域名,系统会向http://resource.zhoulei.com/.well-known/assetlinks.json请求数据,根据获取到的文件内容,验证应用域名的合法性。

    • 通过App Links Assistant -> Open Digital Asset Links File Generator -> Generate Digital Asset Links file的方式生成assetlinks.json文件,然后将该文件放置到正确的域名地址中。

    • 通过App Links Assistant -> Open Digital Asset Links File Generator -> Generate Digital Asset Links file -> Link and Verify可以检测是否正确的在服务器中放置配置文件,检测成功的话,显示如下图:(此处我没有上传,用的网图)

    image

    剪切板

    H5页面在点击下载时自动调用剪切板复制当前用户渠道ID例如:#8283923023#,APP每次启动时调用剪切板内容格式符合则认定该用户和H5用户为同一用户,主要是通过剪切板的写入及读取,获取用户id或者详情页链接

    Universal Link

    Universal Link是iOS 9以后苹果推出的通用链接技术,能够方便的通过一个https链接来打开App指定页面,不需要额外的判断;如果没有安装App,则跳转到自定义地址。

    相对Scheme的优势在于,Universal Link是一个Web Link,因此少了很多麻烦:

    • 当用户已安装该App时,不需要加载任何页面以及判断提示,能够立即唤醒App,用户未安装App,则跳去对应的web link(自定义页面)。

    • Universal Links支持从其他App中的UIWebView中跳转到目标App。

    • 绝大多数平台都支持Universal Link,能被搜索引擎索引,iOS微信7.0.5版本也解除了对Universal Link的限制,目前微信7.0.5以上版本已经能流畅运行****Universal Link

    在Deeplink的实现方案中,Universal Link相比Scheme无疑具有更优的用户体验,iOS9.2及以上的版本更推荐使用Universal Link唤醒App。

    相关文章

      网友评论

          本文标题:DeepLink

          本文链接:https://www.haomeiwen.com/subject/wdypfrtx.html