1. 程式人生 > >android H5 應用內跳轉Scheme協議

android H5 應用內跳轉Scheme協議

直接進入主題

想必大家在開發專案的過程中,都會遇到android與H5介面的互動。並且還有H5介面 跳轉到APP內部的功能需要,同志們可能就會想,我們要用什麼方法來做。那麼接下來我們直接開擼,今天要講解的應用內跳轉Scheme協議

什麼是URL Scheme

概述:
android中的scheme是一種頁面內跳轉協議,是一種非常好的實現機制,通過定義自己的scheme協議,可以非常方便跳轉app中的各個頁面;通過scheme協議,伺服器可以定製化告訴App跳轉那個頁面,可以通過通知欄訊息定製化跳轉頁面,可以通過H5頁面跳轉頁面等。

URL Scheme應用場景

概述:
客戶端應用可以向作業系統註冊一個URL Scheme,該scheme用於從瀏覽器或其他應用中啟動本應用,通過scheme協議來跳轉到相應的APP介面,比如商品詳情,活動詳情,商家詳情等等介面。也可以執行某些指定動作,如完成支付等。也可以在應用內部通過H5頁面來直接跳轉APP某個介面。

  • URL Scheme應用場景分為以下4中:

    • 伺服器下發跳轉路徑,客戶端根據 伺服器下發跳轉路徑跳轉相應的頁面
    • H5頁面點選描點,根據描點具體跳轉路徑APP端跳轉具體的頁面
    • APP端收到伺服器端下發的PUSH通知欄訊息,根據訊息的點選跳轉路徑跳轉相關頁面
    • APP根據URL跳轉到另外一個APP指定頁面

URL Scheme協議格式:

URL Scheme 屬性分為,Scheme,Host,port,path,query,

test://shangjia/shangjiaDetail?shagnjiaId=222

通過上面的路徑我們來分析,

  • scheme : test
  • host : shangjia
  • path : shangjiaDetail
  • query : shangjiaId=222

我們可以用程式碼來驗證:
驗證的地址是這個:test://start/?id=431&name=zhouyuan&age=23

Intent intent = getIntent();
    String action = intent.getAction();
    String scheme = intent.getScheme();
    Uri uri = intent.getData();
    System.out.println("action:" + action);
    System.out.println("scheme:" + scheme);
    if (uri != null) {
        String host = uri.getHost();
        String dataString = intent.getDataString();
        String id = uri.getQueryParameter("id");
        String name = String.valueOf(uri.getQueryParameters("name"));
        String age = uri.getQueryParameter("age");
        String path = uri.getPath();
        String path1 = uri.getEncodedPath();
        String queryString = uri.getQuery();
        System.out.println("host:" + host);
        System.out.println("dataString:" + dataString);
        System.out.println("id:" + id);
        System.out.println("name:" + name);
        System.out.println("age:" + age);
        System.out.println("path:" + path);
        System.out.println("path1:" + path1);
        System.out.println("queryString:" + queryString);
    }

看圖

從這個例子我們能看出:我們是想跳入商家詳情介面。主要的這些引數,都是需要自己去和前端去達成一個協議。並不是說非要按照我的這個例子來。比如你的專案是做汽車的,可以把URL寫成

test://qiche/qicheDetail?qicheId=222

這些都沒什麼影響。

在AndroidMainfest.xml 配置 scheme

<application
    android:name=".MyApplication"
    android:allowBackup="true"
    android:icon="@drawable/logo"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".activity.StartActivity"
        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>
        <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:host="web"
                android:scheme="test" />
            <data
                android:host="start"
                android:scheme="test" />
        </intent-filter>

    </activity> 
<activity android:name=".activity.LoginActivity">
        <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:host="login"
                android:scheme="test" />
        </intent-filter>
    </activity>

當網頁或者通知欄,Android程式碼傳送這種規則scheme時這時候就會調起相對應介面。

那麼接下來我們就該測試一波:

  1. 通過伺服器下發跳轉路徑跳轉相應頁面
    button.setOnClickListener(v -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("test://login/123123123"))));

看下圖:

這個前提,你需要在AndroidMainfest.xml配置,你看上面的程式碼。

2.通過H5頁面的錨點跳轉相應的頁面

html程式碼:

 <html>
<head>
<title>Js呼叫Android</title>

</head>

<body>
<a href="test://start/?id=431&name=zhouyuan&age=23">跳轉start</a>
<a href="test://web/?id=431&name=zhouyuan&age=23">跳轉web</a>
<a href="test://login/?id=431&name=zhouyuan&age=23">跳轉Login</a>
</body>
</html>

//webview程式碼
webview.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            System.out.println("view = [" + view + "], url = [" + url + "]");
            return true;
        }
    });

  • 這個具體的我就不再講了,我們已經獲取到了URL Scheme協議地址。我們可以直接用一些正則來取到相應的字串,然後根據該字串來判斷,跳到相應的介面。

  • 如果你覺得改方法比較麻煩。那可以直接在AndroidMainfest.xml配置相應的屬性,前提是URL協議地址要相應。不然你是跳轉不了的。

具體的可以自行測試,就是把 webview.setWebViewClient(new WebViewClient()){}給註釋掉。
我們點選跳轉Login時,會有意想不到的效果。具體還是不建議這麼做,自己想一想,前面也講到在專案中可能URL Scheme協議並不止一個介面。如果你在AndroidMainfest.xml裡面去給每一個可能相關的介面都配置scheme屬性,那你整個介面看著也不美觀,而且還都是重複的配置。所以還是建議根據URL地址來判斷跳轉。

3.根據伺服器下發通知欄訊息,APP跳轉相應的介面

其實,我們簡單的想一下,都是同樣的邏輯。把伺服器下發的通知欄訊息,裡面的URL地址資料拿到,進行解析判斷,然後跳轉到相應的介面。具體程式碼就不貼了。

總結:
Android中的URL Scheme是一個非常好的機制,我們可以通過自定義Scheme屬性,讓我們方便,靈活的在APP內隨意跳轉。如果不明白請留言。

相關推薦

android H5 應用Scheme協議

直接進入主題 想必大家在開發專案的過程中,都會遇到android與H5介面的互動。並且還有H5介面 跳轉到APP內部的功能需要,同志們可能就會想,我們要用什麼方法來做。那麼接下來我們直接開擼,今天要講解的應用內跳轉Scheme協議 什麼是URL Sc

Android 應用QQ客服的工具類

工具類如下: public class QQUtil { public static void toQQServer(Context context){ try { ApplicationInfo info = context.getPackage

iOS 應用到系統設置

photo pod style software lin vol ios5 per man 在iOS5下面版本號使用下面方法:【IOS5.1+之後不能使用此方法,iOS8的跳轉方法已找到見下方,iOS7的正在摸索。歡迎大家給出觀點意見】 通過URL Scheme的方

iOS應用百度高德蘋果地圖

bool 知識點 coo count value oid bsp lse rec 移動開發經常用到基於位置的一些導航功能,但是對於對導航功能依賴性不強的的應用,我們直接采用應用外跳轉地圖APP即可。 但是應用間跳轉,首先需要設置白名單, 在iOS 9 下涉及到平臺客戶端跳

iOS 10 應用到系統設定

http://www.jianshu.com/p/5b7571d7bb34 設定跳轉有三種方式,每一種的使用場景都不同。 並且你在寫Demo測試跳轉到系統中自己應用下面設定的時候,你的應用要提前至少申請了某一個許可權,如(通知,定位等)。否則,會引起崩潰。 方式一:pr

IOS應用到系統設定

iOS應用內跳轉到系統設定 設定跳轉有三種方式,每一種的使用場景都不同。 並且你跳轉到系統中自己應用下面設定的時候,你的應用要提前至少申請了某一個許可權,如(通訊錄,通知,定位等)。否則,會引起崩潰。

Swift iOS應用到設定介面

Swift版 //開啟設定介面 if let url = URL(string: UIApplicationOpenSettingsURLString){ if (UIApplication.s

ios應用到appstore裡評分

在ios6.0前跳轉到appstore評分一般是直接跳轉到appstore評分 NSString *evaluateString = [NSString stringWithFormat:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/

iOS開發中應用到QQ聊天介面和指定的聯絡人聊天

這裡主要是記錄專案中的一個需求,閒著沒事就把它記錄下來,以供有需要的朋友們; 我們一般用webview載入,所以主要的是設定在它的跳轉路徑上; 這裡有兩個路徑,介紹分別如下; 1. mqq://im/chat?chat_type=wpa&uin=好友QQ號&

iOS應用到系統設定頁面

在iOS開發中,有時會有跳轉系統設定介面的需求,例如提示使用者開啟藍芽或者WIFI,提醒使用者開啟推送或者位置許可權等。 設定跳轉有三種方式,每一種的使用場景都不同。 並且你在跳轉到系統中自己應用下面設定的時候,你的應用要提前至少申請了某一個許可權,如通知,定

iOS 應用到系統設定

在iOS5以下版本使用以下方法:【IOS5.1+之後不能使用此方法,iOS8的跳轉方法已找到見下方,iOS7的正在摸索,歡迎大家給出觀點意見】 通過URL Scheme的方式開啟內建的Settings,程式碼如下 [[UIApplication sharedApplic

應用系統設定相關介面方法總結

在 iOS 開發中,經常會遇到有跳轉至系統設定相關介面的需求; 例如: 提示使用者開啟藍芽或者 WiFi 等功能提示操作; 提示使用者開啟推送或者位置相關許可權. 在 iOS 6之後,第三方應用需要跳轉系統設定介面則需要在 URL type 中新增一個 prefs 值.

IOS應用應用之間URL

蜂窩網路:prefs:root=MOBILE_DATA_SETTINGS_ID網路:      prefs:root=General&path=Network/***Wi-Fi:    prefs:root=WIFI定位服務:prefs:root=LOCATION_SERVICES個人熱點:prefs

h5頁面喚起app(iOS和Android),沒有安裝則下載頁面

由於研究了之後,和同事溝通,找到一個地址進入,分別測試不同手機,機型,安卓進入安卓應用商店,ios進入app store ;所以直接貼了一個連結,即可。 下面方法,暫時沒用到,分享給需要的盆友。 COPY的方法如下,參考:------------------------

Android開發之Intent到系統應用中的撥號介面、聯絡人介面、簡訊介面

現在開發中的功能需要直接跳轉到撥號、聯絡人、簡訊介面等等,查找了很多資料,自己整理了一下。          首先,我們先看撥號介面,程式碼如下: Intent intent =new Intent();                 intent.setAction("an

App呼叫系統應用到設定頁面

[UIApplication sharedApplication] openURL:url];通過給url不同的值,可以實現呼叫系統自帶電話/簡訊/郵箱/瀏覽器/… 1、呼叫 電話phone [[UIApplication sharedApplication

Android activity之間的和數據傳遞

.get 結果 設置 空白頁 system mod project idt ride 1、Activity之間的跳轉 並且 傳遞數據   A Activity進行的操作 Intent intent = new Intent(context, B.class

Android中當前Activity到當前Activity頁面

頁面 context android plan nbsp text ini putextra min 步驟:先關閉自己,在跳轉 case R.id.btn_copy:// 復制 Toast.makeText(mContext, "正在復制", Toast.LEN

Android項目頁面小Demo

發的 back name font per create java類 單擊 parent 近期在做Android項目的開發,剛剛接觸會有非常多新東西須要學習,從環境的搭建到語言的熟悉都是須要一步步完畢的,接下來就拿一個頁面跳轉的樣例來和大家分享一下自己的心得

[]微信小程序、微信公眾號、H5之間相互

ret 名單 地址 pro .com 哈哈 png 慕課 域名 本文轉自:https://www.cnblogs.com/colorful-paopao1/p/8608609.html 轉自慕課網 一、小程序和公眾號 答案是:可以相互關聯。 在微信公眾號裏可以添加