1. 程式人生 > >通過頁面呼叫APP【H5與APP互通】

通過頁面呼叫APP【H5與APP互通】

http://www.cnblogs.com/carlos-guo/p/3945112.html

現在H5和App原生的內容原來越互通,所涉及的業務也越來越複雜和融合,所以如何互相之間方便的呼叫才是王道。

場景1

   比如用hybrid獲取地理位置和簡訊資訊,這當然需要框架封裝好,比如利用框架的bridge.js(下一篇文章會詳細講這個內容)

場景2

最簡單的比如用H5呼叫App然後再判斷是否有安裝此應用,如果有則直接開啟應用,則安裝如果沒有則去itunes或者google市場安裝。

  比如淘寶上的立即開啟功能

image

首先場景2的功能,我們需要了解他的幾個流程

   1.判斷程式系統環境

   2.判斷有應用開啟應用

   3.判斷無應用則跳到相應的連結區執行

我們就從淘寶的手機此功能來分析一下吧

1.js判斷環境

   這個環境是很好判斷的

  通過useragent即可

複製程式碼
var ua = navigator.userAgent;
複製程式碼
if(ua.match(/iPhone|iPod/i) != null){
//iphone程式碼
}
else if(ua.match(/Android/i) != null){
//android程式碼
}
else if(ua.match(/iPad/i) != null){
//ipad程式碼
}
複製程式碼 複製程式碼

用瀏覽器模仿很容易看到識別手機這個的資訊

image

這裡我模仿google Nesux4的值是

navigator.userAgent;
"Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19"

其他

這裡再稍微介紹一下關於下載這種渠道的運營,

通過不同的渠道是要進行返利的,所以這一部分得作為統計,推廣都是要砸錢啊~

TTID 是用於統計無線客戶端使用者訪問情況的統計程式碼,

2.認識了環境之後可以愉快的呼叫了吧?

   這個跟握手規則很接近,不是你想調就能掉,

   首先應用得定義自己的規範(schema規則)定義自己的連結,根據定製的連結才能掉。當應用定義這個規則以後不僅可以應用和頁面之間呼叫,而且應用可以和應用之間呼叫。

  ios中需要在info.plist

在Info.plist中,增加一個欄位,名稱為CFBundleURLTypes(URL Types)。

裡面的內容為陣列形式,其中定義好一個CFBundleURLName後將

以CFBundleURLSchemes為可以的array才是我們可以呼叫的內容
複製程式碼
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>package name(com.cnblogs.www)</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>cloud</string>
        </array>
    </dict>
</array>
複製程式碼

比如定義了上面這句後就可以用

iOSDevTips://的schame呼叫了

具體用法可見

  ios預留了以下schema

複製程式碼
//開啟Mail
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]]

//開啟電話
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8004664411"]];

//開啟SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:55555"]];

//開啟AppStore
NSURL *appStoreUrl = [NSURL URLWithString:@"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=291586600&amp;mt=8"];
[[UIApplication sharedApplication] openURL:appStoreUrl];
複製程式碼 詳情參見https://developer.apple.com/library/ios/featuredarticles/iPhoneURLScheme_Reference/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007899-CH1-SW1

Android android通過intent來呼叫

首先得在android配置檔案manifest裡面為相關需要呼叫的頁面配置intent

複製程式碼
<activity android:name=".MyUriActivity">
    <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="path" />
    </intent-filter>
</activity>
複製程式碼

android intent配合比較複雜,而且也可以用於在內部的呼叫,甚至在頁面切換的時候也是必不可少的,對於呼叫比iphone的相對更寬泛些。全域性的呼叫是用broadCast廣播的方式進行,而頁面之間的傳輸是在頁面下定義

此外如果android要用intent呼叫別的app或者其他什麼的還需要加相關的permission

吶在H5中我們就這樣呼叫就好

intent://

我們來看看淘寶是怎麼做到的

在裡面有個imageintent的連結

剩下的不言自明

ok所以剩下的功能變的非常簡單

3.呼叫App

複製程式碼
var ua = navigator.userAgent;if(ua.match(/iPhone|iPod/i) != null){
  document.location = 'chblogs://'; }
else if(ua.match(/Android/i) != null){
  document.location = intent:com.cnblogs.cn.client.android;end'; }
else if(ua.match(/iPad/i) != null){
  document.location = 'chblogs://'; 
}
複製程式碼

大部分工作完成了,坑坑也該現身了

現在要考慮的是如果app不在那麼我們應該去下載頁面下載

系統不會那麼聰明幫你辦好這件事。

這裡的邏輯很簡單,當沒有成功開啟app的時候

新頁面不會彈出則頁面邏輯可言進行,如果進入了新頁面,則頁面邏輯便終止了

所以我們可以另開一個延時的執行緒來判斷這個事情

複製程式碼
if(...){
document.location = '';
setTimeout(function(){
   //此處如果執行則表示沒有app
},200);
}
複製程式碼

好了,這樣就完成了,坑坑就是andorid如果判斷沒有此程式會開啟未找到頁面

那我們在請求的時候就應該對android做一個檢索intent://scan/#Intent;scheme=這樣的話就ok了

所以我們之間可以這樣完成了我們可以直接取itunes或者google市場下載了

看淘寶的程式碼

image

下次有時間了會繼續研究一下hybrid和webapp的通訊。

相關推薦

通過頁面呼叫APPH5APP互通

http://www.cnblogs.com/carlos-guo/p/3945112.html 現在H5和App原生的內容原來越互通,所涉及的業務也越來越複雜和融合,所以如何互相之間方便的呼叫才是王道。 場景1    比如用hybrid獲取地理位置和簡訊資訊,這當然

h5App原生互動方案

方便測試階段,H5嵌入到App當中,開發人員方便除錯與Debug。 目前主流的技術方案: 1.在iOS7以前,在UIWebView中實現一些代理方法攔截帶有約定好的protocol的Url,從Url上獲取get方式的引數傳遞,對映成本地原生方法,如下: -(BOOL)webView:(UIWebView *)

記一次利用vue.js完成的h5app的互動

嘮叨:最近接收一個用vue寫的專案,對我來說甚是頭大。不得不說這是對傳統前端的一次大過濾,之前仗著html,css,js混飯吃的前端兒們,壓力越來越大,我就是這樣的一個例子。壓力越大,只要不放棄,成長的也越快啊,所以,咬牙就咔咔開始幹。 需求:一個H5分享頁面

IOS開發系列——APP間相互呼叫專題整理,部分原創

APP間相互呼叫專題 1    OpenUrl原理 如果一個應用程式支援一些已知型別的URL,您就可以通過對應的URL模式和該程式進行通訊。然而,在大多數情況下,URL只是用於簡單地啟動一個應用程式並顯示一些和呼叫方有關的資訊。舉例來說,對於一個用於管理地址資訊的應用程式,

H5App的互動(WebViewJavascriptBridge)

最近有時間整理下H5與APP的互動框架(WebViewJavascriptBridge),既可以和ios互動也可以和安卓互動,我只做了和IOS的互動,所以只闡述和IOS的互動。 1:JS端的操作 /* WebViewJavascriptBridge框架使用 這段程式碼是固

Xamarin.Forms 2App基礎知識App啟動

## 系列目錄 1、[【Xamarin.Forms 1】App的建立與執行](https://www.cnblogs.com/sesametech-netcore/p/13211541.html) ## 引言 本篇文章將介紹`Xamarin.Forms`中 `App` 基礎知識和 `App`的啟動。 ##

ionic+cordova混合開發app二、建立專案

1、建立專案 1、cmd進入專案存放的位置 2、開啟ionic官網進入專案建立demo示例依照步驟執行命令列建立專案: 官網地址:http://ionicframework.com/docs//intro/tutorial/ ionic start 專案名稱 tabs 其中專案名稱表示你要給自

ionic+cordova混合開發app一、環境搭建

APP開發採用ionic進行開發,ionic官網http://ionicframework.com/docs/。 開發軟體採用Visual Studio,安裝包百度下載即可。 版本 ionic 3.9.2 node v8.12.0 cordova 6.5.0 1、node簡介: 1)Nod

移動端H5頁面截圖含 domtoimage、html2canvas

// 裁剪名片 cropCard() {     let self = this; // 獲取dom結構 let card_target = this.refs.copyCardArea;  domtoimage.toPng(card_target).then(func

app嵌入網頁app互動

一、傳參給ios // iosapp互動 function setupWebViewJavascriptBridge(callback) { if (window.WebViewJavascriptBridge) { return callback(WebView

概率論數理統計小結2 - 隨機變量概述

-a img 有時 內容 區間 sample padding 個數 平均值 註:對隨機變量及其取值規律的研究是概率論的核心內容。在上一個小結中,總結了隨機變量的概念以及隨機變量與事件的聯系。這個小結會更加深入的討論隨機變量。 隨機變量與事件 隨機變

概率論數理統計小結6 - 大數定理中心極限定理

tween 每次 研究 1-1 var 1.2 displays 一個 alt 註:這兩個定理可以說是概率論中最重要的兩個定理。也是由於中心極限定理的存在,使得正態分布從其他眾多分布中脫穎而出,成為應用最為廣泛的分布。這兩個定理在概率論的歷史上非常重要,因此對於它們的研究也

概率論數理統計小結7 - 統計基礎概念

mooc 基本概念 其他 信息 相等 們的 哈工大 參數 子集 註:概率論方面就暫時告一段落,終於可以說說統計方面的事情了。如果說概率論中主要是研究隨機變量的方法學和理論模型,那麽統計學就是利用概率論這一強大的工具來研究具有隨機性的現象(結果的不確定性)。而研究這些隨機現象

概率論數理統計小結9 - 參數估計概述

div 有時 with src for 依賴 sigma edi sim 註:在統計學的應用中,參數估計和假設檢驗是最重要的兩個方面。參數估計是利用樣本的信息,對總體的未知參數做估計。是典型的“以偏概全”。 0. 參數及參數的估計 參數

概率論數理統計小結10-1 - 假設檢驗概述

sqrt htm get 依據 事件 http 例如 style 科學 註:終於寫到最激動人心的部分了。假設檢驗應該是統計學中應用最廣泛的數據分析方法,其中像"P值"、"t檢驗"、"F檢驗"這些如雷貫耳的名詞都來自假設檢驗這一部分。我自己剛開進入生物信息學領域,用的最多的就

演算法資料結構連結串列

1.如何分別用連結串列和陣列實現LRU緩衝淘汰策略? 1)什麼是快取? 快取是一種提高資料讀取效能的技術,在硬體設計、軟體開發中都有著非廣泛的應用,比如常見的CPU快取、資料庫快取、瀏覽器快取等等。 2)為什麼使用快取?即快取的特點 快取的大小是有限的,當快取被用滿時,哪些資料應該被清理出去,哪

演算法資料結構陣列

陣列看起來簡單基礎,但是很多人沒有理解這個資料結構的精髓。帶著為什麼陣列要從0開始編號,而不是從1開始的問題,進入主題。 1. 陣列如何實現隨機訪問 1) 陣列是一種線性資料結構,用連續的儲存空間儲存相同型別資料 I) 線性表:陣列、連結串列、佇列、棧 非線性表:樹 圖 II) 連續的記憶體空間

演算法資料結構演算法複雜度分析

一、什麼是複雜度分析? 1.資料結構和演算法解決是“如何讓計算機更快時間、更省空間的解決問題”。 2.因此需從執行時間和佔用空間兩個維度來評估資料結構和演算法的效能。 3.分別用時間複雜度和空間複雜度兩個概念來描述效能問題,二者統稱為複雜度。 4.複雜度描述的是演算法執行時間(或佔用空間)與資料

正規化函式依賴3NFBCNF的區別

  *本文中碼指代候選碼,主屬性為構成碼的屬性。 先簡要引入幾個概念 圖1 圖2   單拿出來我認為不是很好理解的3NF和BCNF詳細的說說。   書上寫了,BCNF是完善後的3NF。從圖2中顯然得出,1-3NF都是規範非主屬性與碼之間的關係。而主屬性之間的關係沒

模擬閱讀理解Gym - 101954C Rullete

http://codeforces.com/gym/101954/problem/C 題意:14行虛擬碼讓你翻譯。 坑得yibi #include<stdio.h> #include<stdlib.h> #include<string.h> #include&l