Android使用URL Scheme唤起APP

现如互联网的发展,单个app或者单个平台很难满足公司业务的需求,多平台合作或协作是大势所趋。并且未来IT业务的发展形势必然要朝着平台化共享化的方向发展。业务对于平台的依赖也会越来越强。平台之间的数据交换和共享是必然会发生的事情。

扯远了,把视线回归到APP本身。不同的APP之间也是需要进行数据交互。举个栗子简单说下URL Scheme

假如有这么一个场景,公司由于业务的发展,需要app用户在app内进行实名认证,恰好支付宝平台提供芝麻实名认证功能。那么app就需要进行唤起支付宝app进行实名认证,实名认证完毕之后支付宝返回实名认证结果。这就完成了不同app之间进行了数据交互。

URL Scheme:

  android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。

URL Scheme协议格式:

栗子1:
http://baidu:8080/news?system=pc&id=45464

栗子2:
alipays://platformapi/startapp?appId=20000067

http 代表Scheme的协议

baidu代表作用于哪个地址域

8080代表路径的端口号

news代表Scheme指定的页面

system和id代表要传递的参数

URL Scheme使用方法:

首先要在Mainifest文件中对要启动的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="http" android:host="baidu" android:path="/news" android:port="8080"/>    </intent-filter> </activity>

在activity中进行接收参数:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = getIntent();
        String scheme = intent.getScheme();
        String dataString = intent.getDataString();
        Uri uri = intent.getData();
        System.out.println("scheme:" + scheme);
        if (uri != null) {
            //完整的url信息
            String url = uri.toString();
            //scheme部分
            String schemes = uri.getScheme();
            //host部分
            String host = uri.getHost();
            //port部分
            int port = uri.getPort();
            //访问路径
            String path = uri.getPath();
            //编码路径
            String path1 = uri.getEncodedPath();
            //query部分
            String queryString = uri.getQuery();
            //获取参数值
            String systemInfo = uri.getQueryParameter("system");       String id=uri.getQueryParameter("id");         System.out.println("host:" + host);       System.out.println("dataString:" + dataString);        System.out.println("id:" + id);        System.out.println("path:" + path);        System.out.println("path1:" + path1);        System.out.println("queryString:" + queryString);     }   } }

调用方式:

网页上调用

<a href="http://baidu:8080/news?system=pc&id=45464">test</a>

native调用

if (hasApplication()) {
Intent action = new Intent(Intent.ACTION_VIEW);
StringBuilder builder = new StringBuilder();
builder.append("http://baidu:8080/news?system=pc&id=45464");
action.setData(Uri.parse(builder.toString()));
startActivity(action);
}

/**
* 判断是否安装了应用
* @return true 为已经安装
*/
private boolean hasApplication() {
        PackageManager manager = mContext.getPackageManager();
        Intent action = new Intent(Intent.ACTION_VIEW);
        action.setData(Uri.parse("http://"));
        List list = manager.queryIntentActivities(action, PackageManager.GET_RESOLVED_FILTER);
        return list != null && list.size() > 0;
    }
时间: 2024-10-08 01:28:49

Android使用URL Scheme唤起APP的相关文章

通过注册的URL Scheme向目标APP传递参数

通过注册的URL Scheme向目标APP传递参数 通过URL Scheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URL Scheme自定义URL来传递参数了. 昨天我们在AppDelegate调用了UIApplicationDelegate的代理方法: - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url { // 接受传过来的参数 NSSt

H5唤起app

H5唤起app 1.判断是否在微信中打开 无论是在哪个平台的客户端Android/IOS,在微信的平台上访问都有一个问题,那就是无法启动客户端,这是微信为了安全性考虑的限制,android这边屏蔽schema协议,除非公司是微信的伙伴加入了白名单才能使用,IOS系统可以去访问app对应appstore的下载页,但是微信经常屏蔽appstore的这个网址,进而访问不到.比较方便的做法就是在微信浏览器中,无论是IOS还是android都去应用宝的下载(IOS 这边最后会到appstore中)页面打开

H5按钮唤起APP应用(IOS)或跳转至APPstore

昨天刚到公司收到了内部邮件,让调研是否可以由H5页面直接唤起APP.因为之前搞过这个东西,所以直接回复可以唤起,但是与前端联调时,遇到了种种的坎,所以今天特此记录一下,方便以后使用. 首先H5唤起APP,需要在H5和APP中进行不同的设置. 原理说明 首先需要说明,不管iOS还是Android,浏览器都不可能预知本地是否安装了某个APP的.或者更严谨地说,我们不能通过浏览器来预知本地是否安装.因为就算浏览器可以读取本地应用的安装列表,但是目前也没任何一家浏览器提供查询的API,所以这条路是走不通

IOS之URL Scheme的使用

本文转载自(下载示例代码请打开第一个链接): http://www.cocoachina.com/industry/20140522/8514.html http://blog.csdn.net/wbw1985/article/details/26264029 1 URL Scheme是什么 与Android的URL Scheme类似,是为方便app之间互相调用而设计的.你可以通过一个类似URL的链接,通过系统的OpenURL来打开该app,并可以传递一些参数.每个URL必须能唯一标识一个APP

IOS应用程序的跳转和URL Scheme的使用

第一:什么是URL Scheme 与Android的URL Scheme类似,是为方便app之间互相调用而设计的.你可以通过一个类似URL的链接,通过系统的OpenURl来打开该app,并可以传递一些参数.每个URL必须能唯一标识一个APP,如果你设置的URL与别的APP的URL冲突,此时,你的APP不一定会被调用起来,原因是当APP在安装的时候就已经在系统里面注册了此APP的URL Scheme,如果你的一致但是是后安装的,那么系统不会调用你的APP,因为你的APP设置的URL scheme被

iOS URL Scheme

目的:通过URL Scheme启动APP,并且在启动APP的时候传递参数. 一.通过URL Scheme启动APP 1.先注册URL Scheme,在info.plist里添加URL Scheme,选择add row添加URL types 2.添加完URL types,点击展开,添加URL Schemes 3.设置URL Schemes为xxxx 4.设置URL Identifier,URL Identifier是自定义的 URL scheme 的名字,一般采用反转域名的方法保证该名字的唯一性,

Android Studio 第六十四期 - Android业务组件化之URL Scheme使用

什么是 URL Scheme? android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面:通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等. URL Scheme应用场景: 客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从浏览器或其他应用中启动本应用.通过指定的 URL 字段,可以让应用在被调起后直接打开某

iOS App 自定义 URL Scheme 设计(转自COCOACHINA)

在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个程序. 例如在 iPad 上浏览网页,并且 iPad 已经安装了 淘宝 HD,那么就打开下面这个链接就会在淘宝 HD 中查看这个商品的详细信息,也可以方便的使用淘宝 HD 进行购买.收藏等操作. 在淘宝 HD 中查看商品“2012西藏卓明谷方舟登舰卡(船票)” 当然,如果你在 Mac OS X 中打

DropboxSDK: unable to link; app isn&#39;t registered for correct URL scheme

DropboxSDK: unable to link; app isn't registered for correct URL scheme db-appkey   (一定要db开头) DropboxSDK: unable to link; app isn't registered for correct URL scheme