js和原生應(yīng)用常用的數(shù)據(jù)交互方式

屏幕快照 2018-11-08 21.50.50.png

場景1

在原生app中經(jīng)常會使用到H5頁面鉴竭,比如說電商中的活動頁柿估,一些電商中的詳情頁循未,等等...這些頁面都有一個特點,那就是在未來修改的可能性秫舌,和一次性的幾率特別的大的妖。所以用H5的頁面是最睿智的一種選擇。
一旦使用了H5那么就少不了和原生開發(fā)的一些交互(Android, IOS)如下的方案能夠幫助你解決足陨。
其實現(xiàn)原理是原生在js的window對象中注入一個js方法嫂粟,以備原生應(yīng)用進行處罰觸發(fā),就和我們平時去調(diào)用onclick的方法一樣簡單墨缘。
js代碼:

// mobile/index.js 常用js 調(diào)用原生的方式都在這里體現(xiàn)赋元。
export default {
    /**
     * 調(diào)用移動端方法
     *
     * @param {*} {name, params, call} 移動端注入的方法名 | 參數(shù) | 回調(diào)
     */
    callMoblieMethods({name, params, call}){
        // 移動端安卓的環(huán)境
        if(window.android) {
            // 移動端使用java所以不能直接解析json,只能解析字符串或者json字符串
            window.android[name](JSON.stringify(params));  
        }
        // 移動端IOS的環(huán)境
        if(window.webkit && window.webkit.messageHandlers) {
            window.webkit.messageHandlers[name].postMessage(params);
        }
    }
}

調(diào)用方式

if(window.android || (window.webkit && window.webkit.messageHandlers.activityDetails)) {
    mobile.callMoblieMethods({ name: 'activityDetails', params: {activityId: item.act_id}});
}

這個判斷條件大家看起來可能很詭異,我測試過這各種機器的機型飒房,安卓機window肯定是沒有的屬性,但是在IOS上他會自帶webkit屬性所以我們先判斷他是否有webkit屬性在判斷他是否有注入的方法名這樣他就能很好的調(diào)用這個方法了媚值;

為了方便大家查找這里也附上移動端的代碼:

//Android

public class AndroidJavascriptInterface {

  Activity mActivity;

  public AndroidJavascriptInterface(Activity activity) {
      this.mActivity = activity;
  }

  //診所詳情
  @JavascriptInterface
  public void clinicDetails(String jsonData) {
      Log.i("znh", "H5-JS-診所詳情");
      Intent intent = new Intent(mActivity, OutPatientActivity.class);
      Bundle bundle = new Bundle();
      bundle.putString(Constants.CLINIC_ID, GsonUtil.getJSONObjectKeyVal(jsonData, "clinicId"));
      intent.putExtras(bundle);
      mActivity.startActivity(intent);
  }

  //活動詳情
  @JavascriptInterface
  public void activityDetails(String jsonData) {
      Log.i("znh", "H5-JS-活動詳情");
      Intent intent = new Intent(mActivity, ActivityDetailActivity.class);
      Bundle bundle = new Bundle();
      bundle.putString("id", GsonUtil.getJSONObjectKeyVal(jsonData, "activityId"));
      intent.putExtras(bundle);
      mActivity.startActivity(intent);
  }
}


//IOS
#import <JavaScriptCore/JavaScriptCore.h>

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];
[wkWebConfig.userContentController addScriptMessageHandler:self name:@"clinicDetails"];
[wkWebConfig.userContentController addScriptMessageHandler:self name:@"activityDetails"];

通過這個流程大家就能很方便的調(diào)用原生的方法了狠毯。

場景2

我們需要在短信中使用某個鏈接去打開原生應(yīng)用如果沒有那么就會提示他去下載某個應(yīng)用,首先原生的應(yīng)用需要定義一個url鏈接以備前端程序員在瀏覽器中調(diào)用褥芒,先給大家看一下鏈接示例:

// IOS
iOSStarClinic://

// Andriod 
yjjkyl://starclinic

短小精悍嚼松,你只需要調(diào)用這個就可以了

那么在js中要怎么做呢?

if(this.isIOS) {
    window.location.href = 'iOSStarClinic://';//與APP約定的一個協(xié)議URL
} else {
    var state = null;
    try {
        state = window.open('yjjkyl://starclinic', '_blank');//與APP約定的一個協(xié)議URL
    } catch(e) {}
    if (state) {
        window.close();
    } else {
        window.location.href = gbs.patientDownUrl;
    }
}

先判斷一下當(dāng)前是IOS還是安卓環(huán)境锰扶,其實現(xiàn)在的瀏覽器已經(jīng)不能通過偏方(計時的方法)來解決檢查當(dāng)前時候有沒有安裝應(yīng)用了献酗,因為瀏覽器會彈出提示框用戶確認(rèn)才能跳轉(zhuǎn)所以用戶一旦不點擊確認(rèn)那么瀏覽器就會進行跳轉(zhuǎn)!所以在當(dāng)前頁應(yīng)該要給用戶顯示一些內(nèi)容以便用戶未打開應(yīng)用的時候有其他的業(yè)務(wù)流程坷牛。

-完-

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罕偎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子京闰,更是在濱河造成了極大的恐慌颜及,老刑警劉巖甩苛,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異俏站,居然都是意外死亡讯蒲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門肄扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墨林,“玉大人,你說我怎么就攤上這事犯祠⌒竦龋” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵雷则,是天一觀的道長辆雾。 經(jīng)常有香客問我,道長月劈,這世上最難降的妖魔是什么度迂? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮猜揪,結(jié)果婚禮上惭墓,老公的妹妹穿的比我還像新娘。我一直安慰自己而姐,他們只是感情好腊凶,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拴念,像睡著了一般钧萍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上政鼠,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天风瘦,我揣著相機與錄音,去河邊找鬼公般。 笑死万搔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的官帘。 我是一名探鬼主播瞬雹,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼刽虹!你這毒婦竟也來了酗捌?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎意敛,沒想到半個月后馅巷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡草姻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年钓猬,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撩独。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡敞曹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出综膀,到底是詐尸還是另有隱情澳迫,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布剧劝,位于F島的核電站橄登,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏讥此。R本人自食惡果不足惜拢锹,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萄喳。 院中可真熱鬧卒稳,春花似錦、人聲如沸他巨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽染突。三九已至捻爷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間份企,已是汗流浹背也榄。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留薪棒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓榕莺,卻偏偏與公主長得像俐芯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子钉鸯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1吧史、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 在時間的荒原里,如你唠雕,如我贸营。一切就如電影片段略過吨述,任憑你如何發(fā)瘋似的去懷念,如何歇斯底里想要留住钞脂,喜悲揣云,傷痛,看似...
    悲傷逆流成河fay閱讀 167評論 0 0
  • 一方山水一方土冰啃, 千秋入夢露哺乳邓夕; 根泉煎得根葉醉, 恰是兒入母懷睡阎毅。 (誠以為煮茶取同根之水甚善焚刚。2016.6.14)
    龍茶館閱讀 159評論 6 0
  • 清晨,有風(fēng)扇调, 樹葉沙沙作響矿咕, 路上的車多了起來, 城市醒了狼钮, 美好的一天啟動了碳柱。 清晨,有鳥兒燃领, “布谷布谷”的聲...
    慧心如蓮閱讀 216評論 1 3