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時這時候就會調起相對應介面。
那麼接下來我們就該測試一波:
- 通過伺服器下發跳轉路徑跳轉相應頁面
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 轉自慕課網 一、小程序和公眾號 答案是:可以相互關聯。 在微信公眾號裏可以添加