zoukankan      html  css  js  c++  java
  • 手机网页通过js打开app

    最近接到这样的一个需求,通过网上查阅了a lot资料(其实是踩了很多坑),意识到有必要做一个这样的随笔,以便查阅。

    先说重点:

    1. 第三方浏览器通过网页打开app的普遍方法是通过scheme命令直接打开。

    2. 微信或QQ浏览器通过网页打开app最完善的方法是上传应用宝

    3. 微信或QQ浏览器通过网页打开app只有ios9以上可实现(Android和Ios 9以下除外)。

    废话不说,上代码:

    一。 第三方浏览器直接打开app。

     1 安卓:
     2 
     3 var state = null;
     4 try {
     5     if (scheme != '') {
     6         openIframe.src = '【scheme】://【host】/【openwith】';
     7     }
     8 } catch (e) { }
     9 if (state) {
    10     window.close();
    11 } else {
    12     location.href='下载地址';   
    13 }
    14 
    15 苹果:
    16 
    17 if (scheme != '') {
    18     window.location.href = '【scheme】://';
    19 }

    此处推荐做法:在页面加载的时候尝试打开,加载完毕点击跳转到下载(推荐)。【注:此方式弊端为ios safari浏览器打开时,会提示无法打开

    二。微信或QQ浏览器直接打开app。

    注:此方法仅适用于苹果ios9以上系统。


    准备以下stuff:
    1. 独立域名。
    2. SSL证书。
    3. 被签名的json文件。
    4. Xcode 7・iOS 9 SDK
    5. Capabilities
    6. AppDelegate的代理设置

    步骤:


    1. 在Capabilities的设置中,设置`Associated Domains’的Domains内容

    例:https://www.facebook.com/ -> applinks:facebook.com

    2. apple-app-site-association文件的配置

    注:apple-app-site-association文件一定要放在服务器的根目录下。

     1 {
     2   "applinks": {
     3     "apps": [],
     4     "details": {
     5       "TBEJCS6FFP.com.domain.App": {
     6         "paths":[ "*" ]
     7       }
     8     }
     9   }
    10 }

    paths中的内容为对应App启动的链接路径

    全路径的时候使用“*”。

    特定位置的时候需要指定具体内容,

    1 ["/wwdc/news/", /videos/wwdc/2015/*]

     TBEJCS6FFP.com.domain.App这部分使用的是你的TeamID和Bundle Identifier

    3. 对apple-app-site-association文件的签名

    1 cat apple-app-site-association-unsigned.js | openssl smime -sign -inkey g01-server.key -signer g01-server.crt -certfile  g01-dvcacert.cer -noattr -nodetach -outform DER > apple-app-site-association

    4. App对应的开发

    AppDelegate.m文件中添加以下代码

     1 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
     2 {
     3     NSLog(@"continueUserActiity enter");
     4     NSLog(@"	Action Type : %@", userActivity.activityType);
     5     NSLog(@"	URL         : %@", userActivity.webpageURL);
     6     NSLog(@"	userinfo :%@",userActivity.userInfo);
     7      
     8     NSLog(@"continueUserActiity exit");
     9     restorationHandler(nil);
    10      
    11     NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    12     NSArray *cookies = [sharedHTTPCookieStorage cookiesForURL:userActivity.webpageURL];
    13  
    14      NSLog(@"COOKIE{name: %@", cookies);
    15     return true;
    16 }

    如代码所示,我们可以获取到跳转链接的一些基本信息

    URL内容,ActionType等都是可以获取并且在代码中进行修改的。

    微信或QQ浏览器打开ios9以上app 结束。

    三。微信或QQ浏览器通过应用宝直接打开app

    此方法有待完善(事实是我也没有处理过)。

    结束。

  • 相关阅读:
    【LeetCode】46. 全排列(回溯)
    [P2894][USACO08FEB] 酒店Hotel (线段树+懒标记下传)
    [P2680][NOIP2015T6] 运输计划 (LCA+树上差分+二分)
    静态主席树学习笔记
    [P1941][NOIP2014T3] 飞扬的小鸟 (0/1背包+完全背包)
    [P1084][NOIP2012T6] 疫情控制 (二分+贪心+LCA)
    [P3959][NOIP2017T5] 宝藏 (状压DP+DFS)
    [P2679][NOIP2015T5] 子串 (DP+滚动数组)
    [P1314][NOIP2011T5] 聪明的质检员 (二分+前缀和)
    [P1966][NOIP2013T2] 火柴排队 (求逆序对+归并排序/树状数组)
  • 原文地址:https://www.cnblogs.com/jerry-liu/p/7491219.html
Copyright © 2011-2022 走看看