The Wayback Machine - http://web.archive.org/web/20250829082316/https://github.com/suanmei/callapp-lib
Skip to content

suanmei/callapp-lib

Repository files navigation

callapp-lib

callapp-lib 是一个 H5 唤起 APP 的解决方案,能够满足大部分唤起客户端的场景,也预留了扩展å?£ï¼Œå¸®ä½ å®žçŽ°ä¸€äº›å®šåˆ¶åŒ–çš„åŠŸèƒ½ã€‚

如果你想了解一些唤端的原ç?†çŸ¥è¯†ï¼Œæˆ–者阅读下é?¢çš„æ–‡æ¡£æœ‰ä¸?ç?†è§£çš„å??è¯?,å?¯ä»¥è®¿é—®è¿™ç¯‡å?šå®¢ H5 唤起 APP 指å?— 。

如果你在使用 callapp-lib 的过程中,有好的想法或者å?‘现了 bug,æ?? Issue 就行,作者会å?Šæ—¶è·Ÿè¿›ã€‚

Install

Install with npm:

npm install --save callapp-lib

Usage

const CallApp = require('callapp-lib');

or;

import CallApp from 'callapp-lib';

callapp-lib å?Œæ ·æ”¯æŒ? script 加载,你å?¯ä»¥ä½¿ç”¨ä¸‹é?¢çš„ cdn 文件(地å?€åœ¨ä¸‹é?¢çš„示例中),也å?¯ä»¥ä¸‹è½½ dist/index.umd.js 到你的项目中,index.umd.js 会暴露一个全局å?˜é‡? CallApp ,这个全局å?˜é‡?和上é?¢ commonjs 导入的 CallApp 内容是一致的,使用方法也是一致的。

<!-- �时下载未压缩的最新版本 Js -->
<script src="https://unpkg.com/callapp-lib"></script>

or

<!-- 具体æŸ?一版本,本例中是 3.1.2 ,下载速度较上é?¢å¿«ä¸€äº›ï¼Œå› ä¸ºä¸Šé?¢çš„地å?€ä¼šæœ‰ 302 -->
<script src="https://unpkg.com/callapp-lib@3.1.2/dist/index.umd.js"></script>

callapp-lib 中传递出æ?¥çš„æ˜¯ä¸€ä¸ªç±»ï¼Œä½ éœ€è¦?将它实例化,然å?Žæ‰?能去调用实例对象的方法。

const options = {
  key1: 'xxx',
  key2: 'xxx',
};
const callLib = new CallApp(options);

callLib.open({
  param: {},
  path: 'xxx',
});

答疑

对常è§?的一些问题进行了汇总,如果这些问答无法解决你的疑惑,加钉钉群,按照æ??问模æ?¿è¿›è¡Œæ??问

Options

实例化过程中,需è¦?传递一个 options 对象给类,options 对象å?„属性需è¦?严格按照下é?¢çš„æ ¼å¼?。

下é?¢æ‰€æœ‰ä¸?是必填的,如果你ä¸?需è¦?传值,就ä¸?è¦?写这个属性,而ä¸?是传递一个空字符串或者空对象,callapp-lib 并未对这ç§?情况进行严格的检测。

scheme

类型: object
必填: ✅

用æ?¥é…?ç½® URL Scheme 所必须的那些 v 字段。

  • protocol

    类型: string
    必填: ✅

    APP å??议,URL Scheme 的 scheme 字段,就是你è¦?打开的 APP 的标识。

  • host

    类型: string
    必填: â?Ž

    URL Scheme 的 host 字段。

  • port

    类型: string | number
    必填: â?Ž

    URL Scheme 的 port 字段。

protocol

callapp-lib 2.0.0 版本已移除,原先的 protocol 移入到新增的 scheme 属性中

outChain

类型: object
必填: â?Ž

外链。我们的 APP 的æŸ?些功能å?¯èƒ½ä¼šé›†æˆ?到å?¦ä¸€ä¸ª APP 中,为了区分它们的å??议,会加上一个中间é€?明页æ?¥åˆ†å?‘路由,这层中间页的 URL Scheme 对于我们æ?¥è¯´å°±æ˜¯å¤–链。当然,这里的外链对 Intent å?Œæ ·ç”Ÿæ•ˆã€‚

例:youku://ykshortvideo?url=xxx

  • protocol (2.0.0 版本由原先的 protocal 修改为 protocol,原先的 protocal 是拼写错误)

    å?Œ URL Scheme 的 scheme 字段,在你的 APP 就和上é?¢çš„ protocol 属性值相å?Œï¼Œåœ¨å…¶ä»– APP 打开就传该 APP 的 scheme 标识。

  • path

    å?‚考 URL Scheme 的 path 字段,它代表了该 APP 的具体的æŸ?个功页é?¢ï¼ˆåŠŸèƒ½ï¼‰ï¼Œè¿™é‡Œçš„ path 就是对应的中间页。

  • key

    既然å?ªæ˜¯ä¸­é—´é¡µï¼Œå®ƒè‡ªç„¶è¦?打开我们真正è¦?打开的页é?¢ï¼Œæ‰€ä»¥æˆ‘们需è¦?把è¦?打开的页é?¢çš„ URL Scheme 传递过去。就åƒ?å‰?端从 URL 的 query 字符串里é?¢å?–值一样,客户端也是从 URL Scheme 里é?¢æ?¥å?–。至于å?‚æ•° key 定æˆ?什么,大家自己去å??商å?§ï¼Œä¸Šé?¢çš„示例中 url 也å?ªæ˜¯ä¸€ä¸ªç¤ºä¾‹ã€‚

intent

类型: object
必填: â?Ž

安å?“原生谷歌æµ?览器必须传递 Intent å??议地å?€ï¼Œæ‰?能唤起 APP。

它支æŒ?以下五个属性,其中 scheme 和 上é?¢çš„ protocal 一样,其他四个都是 apk 相关信æ?¯ï¼Œå…¶ä¸­ package 和 scheme 必传:

  • package
  • action
  • category
  • component
  • scheme

universal

类型: object
必填: â?Ž

如果你们的 ios 工程师没有å?šç›¸åº”çš„é…?ç½®æ?¥è®© APP 支æŒ? Universal Link,你å?¯ä»¥ä¸?用传递, callap-lib 将会使用 URL Scheme æ?¥æ›¿ä»£å®ƒã€‚

  • host

    你的 Universal Link 的域å??,apple-app-site-association 文件就放在这个域å??对应的æœ?务器上。

  • pathKey

    3.5.0 版本以å?Ž pathKey é?žå¿…填项,pathkey 填写与ä¸?填写代表了 Universal Link 拼接的两ç§?方å¼?。ä¸?建议使用 pathKey ,因为使用它拼接的 Universal Link ä¸?è´´å?ˆ URL 设计æ€?想。

    • ä¸?使用 pathKey:客户端æ??èµ· path ä¿¡æ?¯å°†ä¼šä»Ž url 中获å?–,而ä¸?是从 queryString 中获å?–

      Universal Link 拼接规则:

      const universalLink = `https://${host}/${open方法中的path}?${open方法中param转æ?¢çš„queryString}`;
    • 使用 pathKey:pathKey 就和å‰?é?¢ Intent 的 key 属性一样,å?ªæ˜¯è¿™é‡Œçš„ pathKey 是客户端用æ?¥æ??å?– path ä¿¡æ?¯çš„,以便知é?“调用的是 APP 的哪个页é?¢ã€‚这个值也是需è¦?你和 ios 童鞋å??商定下æ?¥çš„。

      Universal Link 拼接规则:

      const universalLink = `https://${host}?${pathKey}=${open方法中的path}&${open方法中param转æ?¢çš„queryString}`;

appstore

类型: string
必填: ✅

APP 的 App Store 地å?€ï¼Œä¾‹ï¼š https://itunes.apple.com/cn/app/id1383186862。

yingyongbao

类型: string
必填: â?Ž

APP 的应用å®?地å?€ï¼Œä¾‹ï¼š'//a.app.qq.com/o/simple.jsp?pkgname=com.youku.shortvideo'。如果ä¸?填写,则安å?“微信中会直接跳转 fallback

isSupportWeibo

类型: boolean
必填: â?Ž 默认值: false 是å?¦æ”¯æŒ?å¾®å?šï¼Œé»˜è®¤ä¸?支æŒ?

timeout

类型: number
必填: â?Ž
默认值: 2000

等待唤端的时间(å?•ä½?: ms),超时则判断为唤端失败。

fallback

类型: string
必填: ✅

唤端失败å?Žè·³è½¬çš„地å?€ã€‚

logFunc

类型: function
必填: â?Ž

(status: 'pending' | 'failure') => void;

埋点入å?£å‡½æ•°ã€‚è¿?è?¥å?Œå­¦å?¯èƒ½ä¼šå¸Œæœ›æˆ‘们在唤端的时候å?šåŸ‹ç‚¹ï¼Œå°†ä½ çš„埋点函数传递进æ?¥ï¼Œä¸?管唤端æˆ?功与å?¦ï¼Œå®ƒéƒ½ä¼šè¢«æ‰§è¡Œã€‚当然,你也å?¯ä»¥å°†è¿™ä¸ªå‡½æ•°å?¦ä½œä»–用。

这个回调函数会回执行两次,第一次是触å?‘ open 方法,第二次是唤端失败,它有一个入å?‚ status ,它有两个值 pending 和 failure,分别代表函数触å?‘å?Šå”¤ç«¯å¤±è´¥ã€‚

buildScheme

类型: function
必填: â?Ž

url scheme 自定义拼接函数,内置的 buildScheme 函数是按照 uri 规范æ?¥æ‹¼æŽ¥çš„,如果你们的 app 对 url scheme 有特殊需求,å?¯ä»¥è‡ªå®šä¹‰è¿™ä¸ªå‡½æ•°ï¼Œæ­¤å‡½æ•°æœ‰ä¸¤ä¸ªå…¥å?‚,(config, options), config 是你调用 open 方法是传入的对象,options 是你åˆ?始化 callapp-lib 时传入的对象。

Method

open

唤端功能。接收一个对象作为å?‚数,该对象支æŒ?以下属性:

  • path

    类型: string 必填: ✅

    需è¦?打开的页é?¢å¯¹åº”的值,URL Scheme 中的 path 部分,å?‚ç…§ H5 唤起 APP 指å?— 一文中的解释。

    å?ªæƒ³è¦?直接打开 app ,ä¸?需è¦?打开特定页é?¢ï¼Œpath 传空字符串 '' å°±å?¯ä»¥ã€‚

  • param

    类型: object
    必填: â?Ž

    打开 APP æŸ?个页é?¢ï¼Œå®ƒéœ€è¦?接收的å?‚数。

  • callback 必填: â?Ž

    类型: function

    自定义唤端失败回调函数。传递 callback 会覆盖 callapp-lib 库中默认的唤端失败处ç?†é€»è¾‘。

generateScheme

接收一个对象作为å?‚数,该对象包å?«ä»¥ä¸‹å±žæ€§ï¼š

  • path
  • param

属性å?«ä¹‰å’Œ open 方法å?‚数的属性一致。

返回 URL Scheme。如果你觉得 callapp-lib 的唤端处ç?†æ–¹å¼?ä¸?符å?ˆä½ çš„需求,但你å?ˆä¸?想费心费力的自己去拼凑 URL Scheme,å?¯ä»¥åˆ©ç”¨è¿™ä¸ªæ–¹æ³•直接生æˆ?。

generateIntent

生æˆ? Intent 地å?€ï¼ŒæŽ¥æ”¶å?‚æ•°å?Œ generateScheme 方法å?‚数。

generateUniversalLink

生æˆ? Universal Link,接收å?‚æ•°å?Œ generateScheme 方法å?‚数。

打èµ?

如果刚好解决了你的问题,如果你心情还ä¸?错,如果尚有余粮,å?¯ä»¥ç»™ä½œè€…打èµ?一æ?¯å’–啡哦,爱å®?~