Scheme协议详细介绍

简介:

目录介绍

  • 1.URL Scheme使用场景介绍
  • 2.URL Scheme基础介绍

    • 2.1 什么是URL Scheme?
    • 2.2 URL Scheme协议格式解释
    • 2.3 Scheme链接格式样式
  • 3.URL Scheme如何使用

    • 3.1 设置Scheme
    • 3.2 获取Scheme跳转的参数,并添加跳转方式
    • 3.3 调用方式
    • 3.4 如何判断一个Scheme是否有效
    • 3.5 Scheme在短信息中注意要点

关于Scheme应用案例

关于链接

1.URL Scheme使用场景介绍

  • URL Scheme使用场景,目前1,2,5使用场景很广,有没有一种熟悉的感觉?

    • 1.通过小程序,利用Scheme协议打开原生app
    • 2.H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
    • 3.APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
    • 4.APP根据URL跳转到另外一个APP指定页面
    • 5.通过短信息中的url打开原生app

2.URL Scheme基础介绍

2.1 什么是URL Scheme?

  • android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面

2.2 URL Scheme协议格式

String urlStr="http://www.ycbjie.cn:80/yc?id=hello&name=cg";
//url =            protocol + authority(host + port) + path + query
//协议protocol=    http
//域名authority=   www.ycbjie.cn:80
//页面path=          /yc
//参数query=       id=hello&name=cg
//authority =      host + port
//主机host=        www.ycbjie.cn
//端口port=        80

2.3 Scheme链接格式样式

  • 样式:[scheme]://[host]/[path]?[query]

3.URL Scheme如何使用

3.1 设置Scheme

  • 在AndroidManifest.xml中对标签增加设置Scheme
<activity
    android:name=".ui.main.ui.activity.SchemeFirstActivity"
    android:screenOrientation="portrait">
    <!--Android 接收外部跳转过滤器-->
    <!--要想在别的App上能成功调起App,必须添加intent过滤器-->
    <intent-filter>
        <!-- 协议部分配置 ,注意需要跟web配置相同-->
        <!--协议部分,随便设置 yc://ycbjie:8888/from?type=yangchong  -->
        <data android:scheme="yc"
            android:host="ycbjie"
            android:path="/from"
            android:port="8888"/>


        <!--下面这几行也必须得设置-->
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <action android:name="android.intent.action.VIEW" />
    </intent-filter>
</activity>

3.2 获取Scheme跳转的参数,并添加跳转方式

public class SchemeFirstActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Uri uri = getIntent().getData();
        if (uri != null) {
            //获取指定参数值
            String type = uri.getQueryParameter("type");
            Log.e( "UrlUtils","main: " + type);

            if(type.equals("yangchong")){
                ActivityUtils.startActivity(GuideActivity.class);
            }else if(type.equals("main")){
                ActivityUtils.startActivity(MainActivity.class);
            }
        }
        finish();
    }
}

3.3 调用方式

  • 3.3.1 原生调用
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("yc://ycbjie:8888/from?type=yangchong"));
startActivity(intent);
  • 3.3.2 网页调用
<a href="yc://ycbjie:8888/from?type=yangchong">打开叮咚app</a>
  • 3.3.3 短信息中调用

3.4 如何判断一个Scheme是否有效

PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW,
        Uri.parse("yc://ycbjie:8888/from?type=yangchong"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid) {
    startActivity(intent);
}

3.5 Scheme在短信息中注意要点

  • 设置android:scheme="http"或者android:scheme="https"后,点击短信息或者h5页面,发现没有跳到指定的页面,反而打开的是网页链接。

关于我的博客

目录
相关文章
|
5天前
|
网络协议 安全 算法
HTTP协议与HTTPS协议
HTTP协议与HTTPS协议
|
5月前
|
存储 JSON 前端开发
QT Http协议
QT Http协议
58 0
|
12月前
|
存储 缓存 自然语言处理
HTTP协议和HTTPS协议初探
HTTP协议和HTTPS协议初探
74 1
|
安全 网络协议 程序员
HTTP 和 HTTPS 两种传输协议各自含义是什么?二者使用有什么区别?
HTTP 和 HTTPS 两种传输协议各自含义是什么?二者使用有什么区别?
158 0
HTTP 和 HTTPS 两种传输协议各自含义是什么?二者使用有什么区别?
|
网络协议 网络性能优化
SIP是类似于HTTP的基于文本的协议
SIP是类似于HTTP的基于文本的协议
296 0
|
缓存 API
Qt 5——使用http协议通信
Qt 5——使用http协议通信
466 0
|
网络协议 安全 视频直播
基于QUIC协议的HTTP/3正式发布!
2022年6月6号,IETF 正式发布了 HTTP/3 的 RFC, 这是超文本传输协议的第三个主要版本。
453 0
基于QUIC协议的HTTP/3正式发布!
|
Web App开发 缓存 网络协议
|
网络协议 网络性能优化 流计算
RTSP协议、RTMP协议、HTTP协议的区别
理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP。做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了。 RTSP、 RTMP、HTTP的共同点、区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层。
3072 0
|
数据采集 存储 缓存
HTTP协议Header选项解读
header的语法格式是“key”:“value”的形式,一行一个header,每一个header都有其对应的特殊作用。
HTTP协议Header选项解读