链接打开app_app内打开京东的链接 - CSDN
  • Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据 今天老大给我提了一个需求叫我调研一下,他已经测试了iOS平台上是可以的,需求很简单就是在系统浏览器中通过输入一...
     

    Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据



    今天老大给我提了一个需求叫我调研一下,他已经测试iOS平台上是可以的,需求很简单就是在系统浏览器中通过输入一个uri就可以打开相应的app。

    比如你在ios中的系统浏览器中输入:tel://123,就会跳到拨打电话页面而且拨打号码是123,像这样的命令,老大他用了小米手机测试了一下,发现可以的,所以他就以为Android的也是可以的,但是当我用三星和htc手机测试发现不行,这时候老大就纠结了,但是我个人认为,我们都知道小米手机是模仿IOS的,没想到模仿的这么想。所以老大就叫我去调研,我查阅了资料之后,找到了解决办法如下

    先上一份代码,经楼主验证是绝对可以用的而且也比较清晰的代码!(ps:还是先剧透下吧,第三方大部分浏览器无法成功。)

    点击浏览器中的URL链接,启动特定的App。

    首先做成HTML的页面,页面内容格式如下:

    <a href="[scheme]://[host]/[path]?[query]">启动应用程序</a> 

    这一句就可以了。

     

    各个项目含义如下所示:

    scheme:判别启动的App。 ※详细后述

    host:适当记述

    path:传值时必须的key     ※没有也可以

    query:获取值的Key和Value  ※没有也可以

     

    作为测试好好写了一下,如下:

    <a href="myapp://jp.app/openwith?name=zhangsan&age=26">启动应用程序</a>  

     

    接下来是android端。
    首先在AndroidManifest.xml的MAIN Activity下追加以下内容。(启动Activity时给予)

    ※必须添加项

    <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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>  
    </intent-filter>

    HTML记述的内容加入<data …/>。
    其中必须的内容仅scheme,没有其他内容app也能启动。

     

    ※注意事项:intent-filter的内容【android.intent.action.MAIN】和 【android.intent.category.LAUNCHER】这2个,不能与这次追加的内容混合。
                     所以,如果加入了同一个Activity,请按以下这样做,否则会导致应用图标在桌面消失等问题。

    复制代码
    <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="myapp" android:host="jp.app" android:pathPrefix="/openwith"/>  
    </intent-filter> 
    复制代码

    这样的话,没有问题。

     

    接下来在Activity中需要取值的地方添加以下代码,我是直接写在OnCreate函数里的:


    Intent i_getvalue = getIntent();  
    String action = i_getvalue.getAction();  
      
    if(Intent.ACTION_VIEW.equals(action)){  
        Uri uri = i_getvalue.getData();  
        if(uri != null){  
            String name = uri.getQueryParameter("name");  
            String age= uri.getQueryParameter("age");  
        }  
    }

    这样就能获取到URL传递过来的值了。

    ——————————————————————————————————我是分割线————————————————————————————————————


    代码copy完了,是不是很惊奇的发现用浏览器输入

    myapp://jp.app/openwith?name=zhangsan&age=26

    是不是404,打不开?

    楼主你这不是骗人么!楼主你个混蛋啊。

    客官,稍安勿躁啊,你看看你用的浏览器是什么?UC,猎豹,欧朋?放弃吧,试试系统自带浏览器或者谷歌浏览器吧。肯定能成功的,不能成功的话再来坑我。哈哈。


    ——————————————————————————————————我是分割线————————————————————————————————————

    突然觉得好悲哀,好不容易get了这个技能,却不能被第三方浏览器使用。在这个android浏览器大部分被第三方占据着的时代不得不说是个悲剧啊。


    接下来还是说说为什么第三方浏览器不能成功吧。首先,我发现的是UC浏览器,如果你使用了自己的scheme,而不是http的话,uc会默认在你的scheme前面添加http://。这太坑爹了。其他浏览器没看是不是同样的情况。发现这个问题后我就试着把自己的scheme换成http。然后满怀期待的又跑了一遍,结果还是坑爹了。所以我想会不会是第三方浏览器对url做了处理。到这里,我也无可奈何了。我测试了UC,猎豹,欧朋,这3个都不支持。系统自带的和谷歌浏览器是支持的。


    最后再补充个线索吧,在浏览器里搜索百度应用。进了他们的页面后,他们是可以实现在各种浏览器启动已经安装好的本地app的。看到这个后我就看了下他们页面的源码。


    在这里他们页面添加了个data-sentintent的标签,看到这里,应该能确定第三方浏览器应该是默认都不支持发intent的,只能自己起一个。根据前端说,这个标签应该是自定义的。我们前端看源码的时候发现是这样的


    所以最后的结果应该是百度这边是起了个端口,然后在应用里启用了一个服务,来监听这个端口,来获取这个intent。大概就这个思路了。不过楼主没有实际去操作。项目时间紧,太麻烦了。对了,百度这个是有集成他们inapp这个sdk的。

    再附上stackoverflow两个相关链接:http://stackoverflow.com/questions/3469908/make-a-link-in-the-android-browser-start-up-my-app

    http://stackoverflow.com/questions/2958701/launch-custom-android-application-from-android-browser

    展开全文
  • 用超链接打开App

    2018-12-18 17:52:40
    如何用超链接打开App的某一个页面 —如果App在AndroidManifest.xml有配置shame,端口号,host等等…则可以通过shame加上端口号打开App,就类似于http与https 例如:vistanaApp:8080// 可以打开 shame,端口号分别为...
    1. 如何用超链接打开App的某一个页面
      —如果App在AndroidManifest.xml有配置shame,端口号,host等等…则可以通过shame加上端口号打开App,就类似于http与https
      例如:vistanaApp:8080// 可以打开 shame,端口号分别为 vistanaApp,8080的app,而且是不区分大小写的,
      —如何知道你想打开的App的shame,与端口号呢
      1:用apktool解析出app的AndroidManifest.xml文件(cmd:apktool d test.apk)
      2: 在AndroidManifest.xml中找到你需要的scheme(想打开哪个界面,就用哪个scheme)
    2. 如何实现这个功能
      https://blog.csdn.net/u012721933/article/details/51241675
    展开全文
  • 前言: 随着APP产品的迭代,运营的过程...导致沉睡用户无法送达的,除非你是微信这样的大佬才行,所以,此时通用一点方式就是通过短信发送一条活动链接,通过点击这条链接可以直接跳转到我们的APP。 实现效果: ...

    前言:

    随着APP产品的迭代,运营的过程中往往会有一些活动希望通知到用户,或者唤起沉睡用户,就我们Android而言,当然有推送,长连接一类的方法,但是,基于国内的推送环境,只能APP自己启动长连接,没有统一的系统级别的推送支持,导致沉睡用户无法送达的,除非你是微信这样的大佬才行,所以,此时通用一点方式就是通过短信发送一条活动链接,通过点击这条链接可以直接跳转到我们的APP。

    实现效果:

    6.0以上版本:
    这里写图片描述
    不考虑兼容性的任意版本:
    这里写图片描述

    实现思路

    要唤起我们的App大致工作流程如下:

    Created with Raphaël 2.1.2点击短信链接(http/https)系统6.0+?verifyOk?APP弹框app支持?浏览器yesnoyesnoyesno

    所以,一共有三条线路可以到达我们的APP,在任何安卓版本中,我们走或者中间右边那条线(Deep_Link),6.0之后,我们走左边那条线!(App Link)

    首先我们的试试中间这条线:

    在Android 系统中点击链接会发送一条 action = VIEW 的隐式意图 ,我们只需要在我们的APP 中加入相应的Intent 过滤器去满足这条规则即可,下面我们开始实现,首先我们试试中线方案:

    1.注册需要接受的Activity:
    通常情况下,我们都注册我们APP的启动Activity:

      <activity
                android:name=".Activity.WelcomeActivity"
                android:label="@string/app_name"
                android:theme="@style/AppTheme.NoActionBar">
    
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
    
                <!-- for deep-link -->
                <intent-filter>
    
                    <!-- 必须加否否无法响应点击链接的 Intent-->
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
    
                    <category android:name="android.intent.category.BROWSABLE" />
    
                    <data
                        android:scheme="http"
                        />
                </intent-filter>
            </activity>

    通过加上以上信息,我们的应用就可以响应以http开头的链接了。

    为了验证以上代码,我写了一个Demo,启动页里是WeclcomeActivity,然后延时1.5秒跳转到首页(这里模拟真正App里面的初始化等一些列操作)在WelcomeActivity加入了以上逻辑,然后我们在短信中随便输入一个链接地址,然后我们看看效果:
    这里写图片描述
    嗯,看上去,问题似乎是解决了,我们点击了一个链接,跳转到了我们的App。但是,似乎又延伸出了另外几个问题:

    2.遇到的问题:

    • 如果我如何点击我们自己的网站跳到我们的App而不是任意的链接?
    • 如果我想通过链接跳转到App中不同的页面,应该怎么做?
    • 刚刚出现了一个弹框让我二次确认(一般是选择浏览器,只要是浏览器,都会相应http或者http开头的shceme,如果你的APP安装了多个浏览器,都会出现在这个弹框的选项中),我如何去掉这个恶心的选择浏览器的的弹框?

    为解决我们前面两个问题,我们需要将我们的链接定义成如下格式:

    [scheme]://[host]/[path]?[query]

    刚刚scheme 我们已经定义了,也就是说,为了唤起我们的App,只需要定义scheme就可以了,但是如果我们为了让我们的唤起更加精确,比如我要点击自己的官网跳转到我的App,而不是点击百度也可以,我们就需要在host里面加入我们自己的个性域名,(这里的path也可添加用作区分,也可以不加,如果公司有多个App,可以额外加这个做区分)
    如果我们需要知道在点击这个链接跳到APP之后做不同的事情比如:跳不同的页面、展示不同的数据等,我们就需要在query后面加一些参数。
    我们先现在在短信中输入这样一个链接:

    //http:www.qw.com/data?page=2&text=page2

    修改我们Manifest配置文件添加一个host:

         <data
            android:host="www.qw.com"
            android:scheme="http" />

    在WelcomeActivity里面声明参数的接收:

     @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_wlecome);
    
    
            Intent intent = getIntent();
    
            //接受数据
            if (null != intent.getData()) {
                Uri uri = intent.getData();
                Log.d("qw", uri.toString());
                String pageTarget = uri.getQueryParameter("page");
                String pageText = uri.getQueryParameter("text");
                if (TextUtils.isEmpty(pageTarget))
                    pageTarget = "";
                if (TextUtils.isEmpty(pageText))
                    pageText = "";
    
                Toast.makeText(this, "去页面:" + pageTarget + "\n" + "text: " + pageText, Toast.LENGTH_LONG).show();
    
            }
    
    
            //延迟2秒去主页,模拟数据初始化操作
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    startActivity(new Intent(WelcomeActivity.this, MainActivity.class));
                    finish();
                }
            }, 2000);
        }

    我们再来看看效果:
    这里写图片描述

    加上host之后,我先点击之前那个链接,果然就是直接浏览器访问了,不会提示选择到我们的App了,然后我们点击下面的链接,在Welcome里面也就能展示到我们的数据了,我们可以根据这些数据做一些不同事情。
    到这里大家可能有疑问了,我为什么不直接在我需要跳转的Activity上面声明呢?
    第一:如果我们声明了多个Activity ,即使通过以上规则匹配上,你点击跳转以后,如果用户结束这个Activity的话,就直接回到桌面了,这个是比较奇怪的。

    第二:你的很多配置的初始化可能会在Welcome里面,如果直接去某个页面可能会配置未初始化什么的,所以每次点击链接跳转WelcomActivity,然后传到首页MainActivity,然后在 MainActivty 里面接受数据再做路由才是比较好的做法。

    首先修改我们的WelcomeActivity:

      @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_wlecome);
    
    
            final Intent intent = getIntent();
    
            //接受数据
    //        if (null != intent.getData()) {
    //            Uri uri = intent.getData();
    //            Log.d("qw", uri.toString());
    //            String pageTarget = uri.getQueryParameter("page");
    //            String pageText = uri.getQueryParameter("text");
    //            if (TextUtils.isEmpty(pageTarget))
    //                pageTarget = "";
    //            if (TextUtils.isEmpty(pageText))
    //                pageText = "";
    //
    //            Toast.makeText(this, "去页面:" + pageTarget + "\n" + "text: " + pageText, Toast.LENGTH_LONG).show();
    //
    //        }
    
    
            //延迟2秒去主页,模拟数据初始化操作
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    Intent mainActivityIntent = new Intent(WelcomeActivity.this, MainActivity.class);
                    //我们不再在这个页面处理数据,改到首页去做这件事
                    if(null != intent.getData()){
                        mainActivityIntent.setData(intent.getData());
                    }
                    startActivity(mainActivityIntent);
                    finish();
                }
            }, 2000);
        }

    首页MainActivity:

    public class MainActivity extends AppCompatActivity {
        private final static String TARGET_ONE = "1";
        private final static String TARGET_TWO = "2";
    
        public final static String TEXT_EXTRA = "text";
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            dealWithIntent();
    
        }
    
        private void dealWithIntent() {
    
            Intent intent = getIntent();
            if (null == intent)
                return;
    
            Uri uri = intent.getData();
            if (null == uri)
                return;
    
            String pageTarget = uri.getQueryParameter("page");
            String pageText = uri.getQueryParameter("text");
            if (TextUtils.isEmpty(pageTarget))
                pageTarget = "";
            if (TextUtils.isEmpty(pageText))
                pageText = "";
    
            Intent launchIntent;
            switch (pageTarget) {
                default:
                case TARGET_ONE:
                    launchIntent = new Intent(this, OneActivity.class);
                    break;
                case TARGET_TWO:
                    launchIntent = new Intent(this, TwoActivity.class);
                    break;
    
            }
            launchIntent.putExtra(TEXT_EXTRA, pageText);
            startActivity(launchIntent);
    
        }
    }

    最后是目标Activity,就更简单了,接收那个text,展示一个Toast:

    public class TwoActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_page_2);
    
            Intent intent = getIntent();
            if (null != intent.getExtras()) {
                Toast.makeText(this, intent.getExtras().getString(MainActivity.TEXT_EXTRA) + "", Toast.LENGTH_LONG).show();
            }
        }
    }

    我们看看效果:
    这里写图片描述

    ok,现在前两个问题都解决了,可以点击我们自己的网站跳到APP,也可以拿到数据去做我们想要的事情,只剩下最棘手的一个问题了:这个弹框怎么办?一般情况下,如果出现了弹框,用户可能就不会按照你的意愿去选择我们APP打开链接,也许会选择浏览器,总之体验很不好,只要是scheme是 http 或者https的浏览器都会出现在弹框中!那我自定义scheme不就好了?
    现在我们继续改Manifest文件:

    <data
         android:host="www.qw.com"
         android:scheme="app" />

    然后我们把之间短信的链接改为app:// 开头再运行看看效果:
    这里写图片描述

    奇怪?怎么没跳到我的App?还是跳到了浏览器,我打开浏览器的链接,发现还是访问的http…..原来我在短信里面添加的链接自定义的scheme被短信认为不是一个scheme。。。
    这里写图片描述
    可见红色部分没有被识别,浏览器默认给我加了http….
    既然这样…总是跳不开浏览器的访问,那么我可不可以在浏览器访问某个指定页面的时候,再去重定向跳转到我们的App呢?每次直接访问浏览器,我们就再也不用弹框确认了,所以中线方案最终以体验不好告终,我们选择右线方案!

    3.终究跳不开的http/https访问

    所以我们写一个html 页面,在代码里面做一个重定向,比如我在短信里面点击的链接是 http://www.test.com/data?text=1,我们在html 里面将http或者https改成我们自己定义的app:// 然后保持后面的部分不变:
    现在我拿真机实测一下,我先写一个html网页:

    
    <html>
      <head>
        <meta charset="utf-8">
        <title>测试重定向</title>
      </head>
      <body>
        <script>
          var app = ''
          var url = location.href
          app = url.replace(url.slice(0, 5) === 'https' ? 'https' : 'http', 'app')
    
          location.href = app
        </script>
      </body>
    </html>
    

    然后把它传到服务器上得到的url地址是:
    http://p5ml3g4x2.bkt.clouddn.com/open_app.html
    所以我们把我们APP里面的域名改为:p5ml3g4x2.bkt.clouddn.com

    <data
        android:host="p5ml3g4x2.bkt.clouddn.com
        android:scheme="app" />

    运行:
    这里我用了两个测试机,大部分手机都是这两种情况:
    vivo:
    这里写图片描述
    1加5:
    这里写图片描述

    到这里,如果是原声安卓,直接访问打开,大部分第三方手机有二次确认弹框,点击可以跳转到我们应用,我在短信里面额外添加了的参数,也能顺利拿到并执行逻辑,至此,大功告成,此方法可以覆盖90%以上的手机。

    4.阶段性总结
    我们最终通过浏览器作为跳板,访问任意链接,在网页内部再次重定向,从而精准的唤起我们的应用,而跳过了让用户选择多个APP的过程(在短信里面打开一般就是系统浏览器,即使让你选择也是选择浏览器,不会出现选择某个APP的让用户困惑的情况),从而提高用户的活跃度,对于运营需求有很大的意义。但是这个方法美中不足的是,我从APP退出以后,会回到浏览器的界面,所以,一般这个页面我们可以做成我们的官网,或者APP的下载页面,如果用户没有安装APP,顺带可以为用户提供下载的渠道,一举两得。

    有没有更好的解决方案呢?——有!我们下一步的重头戏——APP Link!

    app link 是在谷歌在android M即(Android 6.0) 推出的一种软件之间的关联方式,通俗点讲,就是可以让我们的APP和我们的web域名相关联,当用户点击一个链接时候,可以直接跳到我们的APP,回到我们之前的问题,在6.0之前,我们点击一个链接的时候,如果想跳到我们的APP,我们需要在scheme声明 http或者https ,所以点击链接的时候会出现一个选择弹框,所以我们选择通过链接来重定向,而现在有了APP LINK ,我们大可不必这么做了,点击就能跳过去,无需浏览器作为跳板。

    首先我们贴上一张对比图:

    DEEP LINK APP LINK
    Intent URL scheme http, https, or a custom scheme Requires http or https
    Intent action Any action Requires android.intent.action.VIEW
    Intent category Any category Requires android.intent.category.BROWSABLE and android.intent.category.DEFAULT
    Link verification None Requires a Digital Asset Links file served on you website with HTTPS
    Pipe May show a disambiguation dialog for the user to select which app to open the link No dialog; your app opens to handle your website links
    Compatibility All version Andoid 6.0+

    相比我们之前的Deep Link ,APP Link 多了许多约束条件,比如scheme 必须是http 或者 https的,但是体验更好,没有用户选择弹框,(实测下来,原生系统直接唤起来,大部分定制系统会提示是否打开链接,如果用户确认以后,就直接跳到APP)调起APP之后逻辑都一样,可以用同样的方式取数据等。

    首先:我们在我们的Manifest 文件中继续对WelcomeActivity 添加配置:

                <intent-filter android:autoVerify="true">
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <category android:name="android.intent.category.BROWSABLE" />
                    <data
                        android:host="o18dxim1q.qnssl.com"
                        android:scheme="http" />
                    <data
                        android:scheme="https" />
                </intent-filter>

    这里跟之前的区别没太多,就是分别添加了 http和https 的scheme,然后最关键的是这个:

    android:autoVerify="true"

    那这个属性是干嘛的呢?
    当然就是为了验证我们点击的链接和我们的APP是否有关联嘛~
    那是怎么关联的呢?
    所以我们还需要一个服务端文件让APP 知道关联关系,APP,在安装的时候会去校验这个文件,校验文件上声明的应用包名、文件所在的域名、以及文件声明的APP密钥,是否能和app中的配置匹配上,如果匹配上了,在点击该域名下的任何链接的时候,都会直接定向到我们的APP。

    我现在已经将文件传到服务器:
    https://o18dxim1q.qnssl.com/.well-known/assetlinks.json
    内容很明显:

    {
    relation: [
    "delegate_permission/common.handle_all_urls"
    ],
    target: {
    namespace: "android_app",
    package_name: "com.qw.applink",
    sha256_cert_fingerprints: [
    "8C:8A:4D:58:E2:00:2E:0B:E2:46:54:74:7D:3E:F2:27:CE:46:FE:08:8D:CF:F7:34:54:B8:36:6D:7B:32:58:A0"
    ]
    }
    }
    

    注意点:

    • 这个文件的格式的content-type必须是application/json
    • 这个文件只能放在https的链接中,不管你之前在action中声明的是http或者https
    • 这个文件不能有任何重定向,并且必须是以/.well-known/assetlinks.json 后缀结尾,注意看我上传的文件示例

    • 你也可以在这个文件上声明多个APP,注意看它的格式,是一个list

    我们也可以通过Android studio 自己生成这个文件:
    点击Tools-App Links Assitant、我们看看第三步:

    这里写图片描述

    第一步填入我们文件的域名,第二个填入我们的包名,第三就能生成这个文件了,然后传入它指定的路径即可。
    测试一下:
    我们用一个6.0的模拟器做测试:
    这里写图片描述

    我分别点击了3个链接,如果是我们这个域名下的,就能直接跳转到APP,如果你添加了额外的数据,当然也跟之前一样拿到,不同的是,我们APP退出的时候,没有出现浏览器,这样体验是不是很完美?

    再来个一加5做实验,真机上面一般会有二次弹框:
    这里写图片描述

    总结:

    目前就目前Android 6.0以上的分布情况来看,已经占到接近60%,随着时间的推移,这个比例会越来越大,相信往后各个手机定制厂商对APP LINK的支持也会越来越好,新技术毕竟是要慢慢普及和用起来的,目前我们还是可以暂时使用DEEP LINK 重定向的方式解决我们的大部分的问题。

    DEMO:https://gitee.com/_soul/DeepLink.git
    参考文献:
    https://developer.android.com/studio/write/app-link-indexing.html

    展开全文
  • 通过超链接url打开一些常见app(scheme)
  • 页面需求:最近遇见一个需求,点击他人分享的信息,进入一个网页,网页中点击“打开”按钮,若手机中没有此APP则下载,我给的是我们公司官网上的下载地址,若手机中有此APP打开打开地址就是我们今天要说的。...

           页面需求:最近遇见一个需求,点击他人分享的信息,进入一个网页,网页中点击“打开”按钮,若手机中没有此APP则下载,我给的是我们公司官网上的下载地址,若手机中有此APP则打开,打开地址就是我们今天要说的。其他需求,通过用手机的浏览器(内置,第三方都可)访问一个网页,实现从网页中点击一个链接启动自己的应用,并传递数据。

    理解

    一个链接地址URL Scheme的协议格式如下:

    <a href="[scheme]://[host]/[path]?[query]"> 唤起应用 </a>

    scheme:代表Scheme的协议名称(必须)

    host和path可选择添加

    query:代表URL传递的数据

    配置

            首先在AndroidManifest.xml清单文件中找到你的主页Activity配置相关信息

    <activity
            android:name="com.example.helloworld.MainActivity" >
            <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="zyt" android:host="app" android:pathPrefix="/openwith"/>
            </intent-filter>
    </activity>

    注意:上面两个intent-filter里的配置信息必须分开。

    结果:只需要在AndroidManifest.xml清单文件中配置这些就可以打开APP了。

    验证方式:创建一个网页,建立一个链接例如<a href="zyt://app/openwith?id=20181015">打开app</a>或者把你配置好的地址给后台,直接在项目中验证。和IOS的不一样,我看见我们的IOS可以直接在游览器中输入链接地址打开APP,Android不能,只能经过一个网页。

    获取链接数据:若是你还需要获取地址中的数据,请看下面。

    如果使用Java获取:

    public class SplashActivity extends AppCompatActivity{
    
            @Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
                    Intent intent = getIntent();
    		String scheme = intent.getScheme();
    		Uri uri = intent.getData();
    		if (uri != null) {
    			String host = uri.getHost();
    			String path = uri.getPath();
    			String queryString = uri.getQuery();
                            String test1 = uri.getQueryParameter("arg0");//参数1
                            String test2 = uri.getQueryParameter("arg1");//参数2
                    }
            }
    }

    如果使用WebView访问该网页,获取数据的操作为:

    webView.setWebViewClient(new WebViewClient(){
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    Uri uri=Uri.parse(url);
                    if(uri.getScheme().equals("zyt")&&uri.getHost().equals("app")){
                        String arg0=uri.getQueryParameter("arg0");
                        String arg1=uri.getQueryParameter("arg1");
                    }else{
                        view.loadUrl(url);
                    }
                    return true;
                }
            });

    这里就结束了,若有问题,请多指正。

    展开全文
  • 点击浏览器中的URL链接,启动特定的App。 首先做成HTML的页面,页面内容格式如下: [scheme]://[host]/[path]?[query]">启动应用程序 这一句就可以了。 各个项目含义如下所示: scheme:判别启动的App。 ※详细后述 ...
  • app或web链接打开另一个app

    千次阅读 2019-01-24 00:22:19
    一,从App A跳转到App B 示例1: Android 从一个 APP A跳转到另一个 APP B主界面 App A开启跳转的代码如下 Intent intent = new Intent(Intent.ACTION_MAIN); //前提:知道要跳转应用的包名、类名 ...
  • 使用MobLink点击链接打开app

    千次阅读 2017-07-12 16:44:45
    现在的市场中使用链接打开app或者下载app的例子很多,比如某个商品的详情页下面有个横幅链接,点击后即跳转到app或者相应的下载地址。 使用MobLink很方便,但是一不注意就掉坑里了。 集成很简单,参照这个文档基本...
  • 微信QQ通过分享链接直接打开APP问题

    千次阅读 2018-08-28 09:59:59
    需求:通过分享链接打开APP并定位到分享的页面   x5浏览器可能有URL scheme白名单, 1、第三方浏览器和应用(除了腾讯)打开APP普遍方法是通过 URL scheme 直接打开APP。“app://abc”.   自己其他应用可以相互...
  • Android Html交互<一> 网页链接打开本地App@(Android系统源码解析)[Android, html]声明:转载请注明出处,知识有限,如有错误,请多多交流指正!Android Html交互一 网页链接打开本地App效果图 网页Html端代码 Android...
  • Android:点击链接打开APP

    千次阅读 2015-11-20 16:31:42
    在Android中点击链接打开APP是一个很常见的需求。例如,电商为用户发送优惠券之后经常会下发一条短信:某某优惠券已发送到您的账户中,点击 xxx 链接即可查看!此时当用户点击链接之后会直接打开本地APP,进入相关...
  • iOS 外部链接打开APP(URL Scheme)

    千次阅读 2018-04-04 13:43:50
    如果想要在 短信、H5页面、超链接、其他APP跳转到你的APP,或者是你跳转到别的APP之后的左上角的返回自己的APP。都需要用到 URL Scheme。首先我们需要有一个项目依次 targets--&gt;Info--&gt;URL Types--&...
  • 最近项目用到了点击分享的短信或者是邮件中的URL直接跳转到APP中,如果APP未安装,直接跳转到AppStore下载页面。下面进入正题 实现方式就是通过设置APP的URL Scheme,那么如何设置呢?come on 1、首先点开需要被...
  • 短信链接唤起app

    千次阅读 2017-08-16 11:00:55
    在Android中点击链接打开APP是一个很常见的需求。例如,电商为用户发送优惠券之后经常会下发一条短信:某某优惠券已发送到您的账户中,点击 xxx 链接即可查看!此时当用户点击链接之后会直接打开本地APP,进入相关...
  • H5链接打开APP并跳转到制定界面

    千次阅读 2017-08-02 12:50:52
    手机如果安装了该应用,就直接打开该应用;如果没有安装该应用,就下载该应用。那么下面就对在浏览器中,用js判断某用户是否安装了该应用,并判断是否打开该应用做个简单的介绍。 那么,怎么判断某用户是否安装了某...
  • 如果我们的应用支持通用链接,那么就能够方便的通过传统的 HTTP 链接来启动 APP(只要设备上已经安装了这个 App,不需要额外做任何判断),或者打开网页(如果 iOS 设备上没有安装该 App) 1,通用链接与...
  • 以前支付宝发短信给你手机 ,然后你点开这个链接的时候会发现它自动的打开了支付宝软件 ,这个是如何做到的呢 ? 其实这个主要的工作还是在链接js上的处理,app所要的操作就是很简单的,在android中的intent-...
  • 利用URL Scheme打开APP并传递数据

    万次阅读 2017-02-16 09:59:52
    利用外部链接打开APP并传递一些附带信息是现在很多APP都有的功能,我在这把这部分的知识记录一下。 1、什么是URL Scheme? android中的scheme是一种页面内跳转协议,是一种非常好的机制,通过自己在...
  • 近期集成了友盟分享,希望做到点击链接能够打开App到指定页面…… 一开始想到用scheme的方法打开,但是貌似在qq 微信都失败了…… 于是和服务端协商做了一个页面 ,让其打开浏览器然后重定向,依然无法唤醒app…… Q...
  • android中的通过网页链接打开本地app

    千次阅读 2016-04-25 17:18:26
    通过用手机的浏览器(内置,第三方都可)访问一个网页,实现点击一个链接启动自己的应用,并传递数据。...通过html页面打开Android本地的app 1.首先在编写一个简单的html页面 Insert title here
1 2 3 4 5 ... 20
收藏数 186,491
精华内容 74,596
关键字:

链接打开app