callapp-lib
callapp-lib 是一个 H5 唤起 APP 的解决方案,能够满足大部分唤起客户端的场景,也预留了扩展�?ï¿½ï¼Œå¸®ä½ å®žçŽ°ä¸€äº›å®šåˆ¶åŒ–çš„åŠŸèƒ½ã€‚
å¦‚æžœä½ æƒ³äº†è§£ä¸€äº›å”¤ç«¯çš„åŽŸï¿½?�知识,或者阅读下�?�的文档有�?�?�解的�??�?,�?�以访问这篇�?�客 H5 唤起 APP 指�?� 。
å¦‚æžœä½ åœ¨ä½¿ç”¨ callapp-lib 的过程ä¸ï¼Œæœ‰å¥½çš„æƒ³æ³•或者�?�现了 bug,�?? Issue 就行,作者会�?�时跟进。
Install
Install with npm:
npm install --save callapp-libUsage
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 方法�?�数。
打�?
å¦‚æžœåˆšå¥½è§£å†³äº†ä½ çš„é—®é¢˜ï¼Œå¦‚æžœä½ å¿ƒæƒ…è¿˜ï¿½?错,如果尚有余粮,�?�以给作者打�?一�?�咖啡哦,爱�?~

