H5 启动 Android App

移动端应用通过社交软件做推广时会做一个 H5 推广页面,生成链接或二维码在微信和一些社交平台通过转发、分享扩散,页面上会有一个启动 app 的交互按钮,一般会引导用户在浏览器中打开这个链接,因为微信屏蔽了跳转,不支持在里面启动 app。

在 Android 里这个功能是通过 Intentfilterscheme 的配置来实现的。但是存在一些兼容问题,市场上有些浏览器和某些机型的系统浏览器屏蔽了 app 的 scheme 协议跳转。

一、 manifiest 文件在需要浏览器唤起的目标 Activity 下新增一个 Intentfilter





   

     

     

  



  

    

    

    

    

  



二、 H5 页面加个超链接跳转启动





js demo









三、目标 Activity 接收解析 H5 页面传过来的数据



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

  if (getIntent() != null && !TextUtils.isEmpty(getIntent().getScheme())) {

    // 组装解析intent里的scheme相关参数
    StringBuilder sb = new StringBuilder();
    // web端配置的超链接 href
    String dataString = getIntent().getDataString();// like "asos://aa.bb:80/test?x=12&key=ssss"
    Log.e("asos", "dataString == " + dataString);
    String scheme = getIntent().getScheme();
    sb.append("scheme == ").append(scheme).append("\n");

    Uri uri = getIntent().getData();

    String host = uri.getHost();
    sb.append("host == ").append(host).append("\n");;

    String path = uri.getPath();
    sb.append("path == ").append(path).append("\n");;

    String encodedPath = uri.getEncodedPath();
    sb.append("encodedPath == ").append(encodedPath).append("\n");;

    String query = uri.getQuery();
    sb.append("query == ").append(query).append("\n");;

    String encodedQuery = uri.getEncodedQuery();
    sb.append("encodedQuery == ").append(encodedQuery).append("\n");;

   String userId = uri.getQueryParameter("userId");
   sb.append("userId == ").append(userId).append("\n");

   TextView tv = (TextView) findViewById(R.id.my_text_view);

   tv.setText(sb.toString());

 }

}

四、安装 demo apk,通过浏览器打开 H5 页面,启动 app


需求上一般都需要先判断是否安装应用,没安装的话就先去下载该应用,ios 端是通过配置 plist实现的

android developer 上有介绍在 chrome 浏览器里的配置和写法

Android Intents with Chrome

To launch the Zxing barcode scanner app, you encode your href on the anchor as follows:

 Take a QR code 

See the Android Zxing Manifest, which defines the package and the host.
Also, if fallback URL is specified, the full URL will look like this:

启动zxing,如果未安装则自动重定向到指定的url

按照上面的写法可以在 chrome 里实现未安装跳转下载的需求


 Take a QR code 

参考 zxing 的 manifest 写法






  

  

  

  



  • 在目标 Activity 再新增一个 intent-filter 配置




  

    

    

  

  

    

    

    

    

  

  

    

    

    

    

  



如此配置以后,点击超链接时如果没有安装应用就会去重定向到指定的下载地址下载apk,然后安装完回到浏览器页面手动启动app

  • 如果不在chrome浏览器也需要实现此需求呢




  

  

  

  



在 AndroidManifest 中定义 intent-filter 的时候,如果其 scheme,host,port,path 的属性拼凑起来是一个有用的 HTTP 路径,这样就算本机没有activity定义了 intent-filter 来捕获这个链接,那这个链接也会重定向到打开这个 url,然后去下载或者也可以打开应用商店去下载。每个 Android 手机都会捕获 market 协议(前提是 Android 手机里面有应用商店),系统就会自动打开 market place 应用商店并根据参数进入搜索页面并显示结果。


 Open my app 

note: 这个超链接一定要与上面的 intent-filter 的 data 里的属性完全匹配才能生效,这时打开该链接时系统会提示你选择用哪个应用打开,如果安装了 myapp 则会出现在选择列表里面。

H5 启动 Android App_第1张图片
Snip20180725_22.png

你可能感兴趣的:(H5 启动 Android App)