{"_id":"@arcturis/call-app","name":"@arcturis/call-app","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.1":{"name":"@arcturis/call-app","version":"1.0.1","description":"通用的唤起app的库","scripts":{"ts-check":"tsc --noEmit","declare-type":"tsc --emitDeclarationOnly","prettier":"prettier -c --write \"**/*\"","lint-staged:js":"eslint --fix --ext .js,.jsx,.ts,.tsx ./src","lint-check":"npm run ts-check && npm run lint-staged:js","cz":"git cz -a","test":"jest --coverage","lint":"commander-tools run lint","fix":"commander-tools run lint --fix","staged":"commander-tools run lint --staged","staged-fix":"commander-tools run lint --staged --fix","dev":"commander-tools run dev","compile":"commander-tools run compile","dist":"commander-tools run dist","analyz":"commander-tools run dist --analyz","build":"commander-tools run build & npm run declare-type","pub":"commander-tools run pub","pub-beta":"commander-tools run pub-beta","unpub":"commander-tools run unpub","doc":"commander-tools run doc","build-doc":"commander-tools run build-doc","doc-upload":"commander-tools run doc-upload"},"main":"lib/index.js","module":"es/index.js","typings":"types/dist/index.d.ts","keywords":["vue","react","npm","import"],"author":{"name":"huangjiaxing","email":"huangjiaxing@zhuanzhuan.com"},"license":"ISC","config":{"commitizen":{"path":"zz-commander-tools/lib/config/commitizen.config"}},"husky":{"hooks":{"pre-commit":"lint-staged","commit-msg":"commander-tools run commitlint"}},"lint-staged":{"**/*.{js,jsx,tsx,ts,less,md,json}":["prettier --write","git add"],"**/*.{js,jsx,ts,tsx}":"npm run lint-check"},"devDependencies":{"@types/node":"^14.14.34","@typescript-eslint/eslint-plugin":"^4.29.0","@typescript-eslint/parser":"^4.29.0","zz-commander-tools":"^1.1.2","babel-eslint":"^10.1.0","eslint":"^7.32.0","eslint-config-airbnb-base":"^14.2.1","eslint-config-prettier":"^6.11.0","eslint-plugin-html":"^6.0.2","eslint-plugin-import":"^2.23.4","eslint-plugin-prettier":"^3.1.3","eslint-plugin-unicorn":"^20.1.0","husky":"^4.2.5","lint-staged":"^11.1.2","prettier":"^2.3.2","typescript":"^3.9.5"},"peerDependencies":{},"dependencies":{"core-js":"^3.6.5"},"gitHead":"37188d5ac64e1f19e8848fecf29b7da550df8c3c","_id":"@arcturis/call-app@1.0.1","_nodeVersion":"14.17.3","_npmVersion":"8.11.0","dist":{"integrity":"sha512-J9bB2pISvUyG7xE5LJyichrXcxIT/0CB6DUrAS0YEvFna1aIJSSPKhGtiLFyuexh2rxyuWzH8cCKj3oDNdvDfw==","shasum":"255d08f1248432e1cecc0e7525239ce42109ced2","tarball":"https://registry.npmjs.org/@arcturis/call-app/-/call-app-1.0.1.tgz","fileCount":60,"unpackedSize":721299,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEYs6SZQ2Zp1k+xpvvUR5jFHif7Y2lAx6L6lExL9jr8+AiEAvvhGaEsu+lN15a+z+PS7dXeiP4X3LqJoTMdA9BPalPE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjIr4VACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrC3w/+LR9OUT6/f3LmvCD6NG3hXis6/c8OTSeZA6WRX+gLCrR65+5+\r\nSpBf83LkZEPVE3iyCUf/lFDxkbnS7gjy9HFVIF0FtKg14giidUMG9RnOC3to\r\ncpghiJ5luKJbvzOQ7UQ3W3j+xCmLf45+3Ydx7QoJRdck7chuh2Eq2xQZxHJ3\r\nqsJ/iSZCsp/pjcPKEwz59G69ZybSh7Hb1JACA9WcxPQMD4jit1qD+Dqe419p\r\np8mZZQgYmc4JhqC7MhOQ23E2BNEo4ALWhd1fYqWdh4XAtokvXxOl0k4/qSGq\r\n3cfunwYbvMIBRYaKQmPYm/BcKbTQdC7b1EBchqv6J9g9gm34Srslm/xJ2WvW\r\nZtro/7bhbsRVo5h5e8K7276gpznx4CUTxbdMXPuLwhpdB5DJEOGAHeCNTS9J\r\nUEpcWa72HeI0U74tUbxUcZRtBJHcP4zoL5Ja3g15Zq7s1UurkN7DoK7DeGOn\r\nPPctyDz+xyUz9Zxp+7CgGUGjySIIIxJMVbSTAU13SsUcROQlW/w5YuMLs/OM\r\nS/RbXJYQZTRAEE8sVhw/uEUJaQR7JANHWmyBVlMlnliglM++tzG3SGTmCtYp\r\nItBpy7DFQdtb9ExAai4gnksY6d8hKdZggv+L0oCVGVNtn045aj2B64WKY9x7\r\n5HQej08es7kH3axzxhL1bR1CgGDlwerb6QA=\r\n=pHaJ\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arcturis","email":"48585478@qq.com"},"directories":{},"maintainers":[{"name":"arcturis","email":"48585478@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/call-app_1.0.1_1663221269428_0.07795301353221284"},"_hasShrinkwrap":false}},"time":{"created":"2022-09-15T05:54:29.312Z","1.0.1":"2022-09-15T05:54:29.593Z","modified":"2022-09-15T05:54:29.754Z"},"maintainers":[{"name":"arcturis","email":"48585478@qq.com"}],"description":"通用的唤起app的库","keywords":["vue","react","npm","import"],"author":{"name":"huangjiaxing","email":"huangjiaxing@zhuanzhuan.com"},"license":"ISC","readme":"# 简介\n\n`call-app` 是一个基于 `typescript` 开发的通用的唤起 app 的 sdk, 支持唤起多个app, 兼容主流浏览器、webview，并支持用户自定义唤起配置。\n\n## 快速上手\n\n### Step1：下载源码或者发布\n\n把源代码 clone 下来，或者下载 并且 build 之后发布到自己私有的 npm 仓库下\n\n### Step2：引入\n\n```js\nimport CallApp from './call-app/src/index.ts'\n// 或者\nimport CallApp from 'call-app'\n```\n\n如果是通过外链 js 引入，那么可以使用 `window.CallApp` 得到 `CallApp` 类\n\n### Step3：使用\n\n实例化 `CallApp` 后，即可使用 `start` 和 `download` 方法.\n\n```javascript\n// 实例化\nconst callApp = new CallApp({\n  path: '', // 要唤起目标 app 的 path ，默认目标app是转转\n})\n// 执行 唤起方法\ncallApp.start()\n// 执行 下载\ncallApp.download()\n```\n或者\n```javascript\n// 实例化\nconst callApp = new CallApp()\n// 执行 唤起方法\ncallApp.start({\n  path: '', // 要唤起目标 app 的 path ，默认目标app是转转\n})\n// 执行 下载\ncallApp.download()\n```\n#### 参数配置项\n\n- **customConfig** `Object` 用户定义配置项, 高阶配置，用法可参考下面示例\n  - **schemeUrl** `String`  scheme uri 地址\n  - **downloadConfig** `Object`  下载配置，可选，不传则采用 landingPage\n    - **ios**  `String`  app-store 链接\n    - **android** `String`  apk下载链接\n    - **android_yyb** `String` 应用宝 下载链接\n  - **universalLink** `String` universal-link链接，可选，ios 会优先采用 universal-link\n  - **landingPage** `String` 唤起失败落地页，一般是下载中间页，优先级高于 `downloadConfig`\n\n- **path** `String` 调起 app 时，默认打开的页面，类型为 app 的统跳地址.\n- **channelId** `String` 渠道号，可选，当用户没有安装 app 时，默认下载的渠道号，安卓支持，iOS 不支持（选填）\n- **targetApp** `String` 调起的目标 app，优先级低于 path 的 prefix，其中：`zz`(代表转转app), `zlj`(代表找靓机app), `zzHunter`(代表采货侠app), `zzSeller`(代表转转卖家版、已废弃), `wxMini`(代表微信小程序,目前只支持转转wx小程序)，默认为`zz`  （选填）\n- **universal** `Boolean` 是否开启通用链接调起模式，默认为`true`\n- **download** `Boolean` 是否会自动跳转下载页面，默认为 `true`\n- **middleWareUrl** `String` 中转 url，如为空则默认跳转下载安装包或 appstore\n- **delay** `Number` 调起app失败后触发下载延迟, 默认 2500（毫秒）\n- **callStart** `Function` 开始执行调起时的hook\n- **callSuccess** `Function` 执行调起成功时的hook\n- **callFailed** `Function` 执行调起失败时的hook\n- **callDownload** `Function` 执行下载时的hook\n- **callError** `Function` 内部异常时的hook\n\n- **urlSearch** `Object` [已废弃] 指定页面调起方式，不推荐，直接设置 path 来跳转即可\n  - **openType** `String` 页面类型，可选值为 `home首页（默认），detail详情页，order订单，mysell我卖出的，person个人中心，village小区，web页面`\n  - **id** `String` 存放 id 或者 url，配合`openType` 的值来用\n\n- **onWechatReady** `Function` 微信端sdk初始化成功后的回调\n\n\n#### api 方法\n\n- **start** `Function` 唤起功能\n\n```js\n// 挂在CallApp实例上的方法\n// options 可选 配置同上\nconst callApp = new CallApp()\ncallApp.start(options)\n```\n\n- **download** `Function`  下载功能\n\n```js\n// 挂在CallApp实例上的方法\n// options 可选 配置同上\nconst callApp = new CallApp()\ncallApp.download(options)\n```\n\n## 示例用法\n\n##### 1. 初始化实例时配置 options，唤起 转转/找靓机\n\n```javascript\n// 引入 lego 埋点 (使用callApp基础库 务必引入埋点上报)\nimport { lego } from 'lego'\n// 唤起 转转\nconst callApp = new CallApp({\n  path: 'zhuanzhuan://jump/shortVideo/videoHome/jump', // 带 prefix\n  channelId: '', //  渠道id ，下载渠道包\n  deeplinkId: '', // 后台配置项\n  targetApp: 'zz', // zz 代表转转，zlj 代表找靓机，zzHunter 代表采货侠；默认 zz\n  callStart() {\n    lego.send({\n      actiontype: 'DOWNLOADAPP-START',\n      pagetype: 'ZZDOWNLOADH5',\n      backup: { channelId },\n    })\n    console.log('ZZDOWNLOADH5 callStart')\n  },\n  callSuccess() {\n    lego.send({\n      actiontype: 'DOWNLOADAPP-SUCCESS',\n      pagetype: 'ZZDOWNLOADH5',\n      backup: { channelId },\n    })\n    console.log('ZZDOWNLOADH5 callSuccess')\n  },\n  callFailed() {\n    lego.send({\n      actiontype: 'DOWNLOADAPP-FAILED',\n      pagetype: 'ZZDOWNLOADH5',\n      backup: { channelId },\n    })\n    console.log('ZZDOWNLOADH5 callFailed')\n  },\n  callDownload() {\n    lego.send({\n      actiontype: 'DOWNLOADAPP-DOWNLOAD',\n      pagetype: 'ZZDOWNLOADH5',\n      backup: { channelId },\n    })\n    console.log('ZZDOWNLOADH5 callDownload')\n  }\n  callError: () => {\n    console.log('内部异常')\n  },\n})\n\n// 执行唤起\ncallApp.start()\n// 执行下载\ncallApp.download()\n```\n\n```javascript\n// 唤起 找靓机\nconst callApp = new CallApp({\n  path: 'native_api?type=132',\n  // path: 'zljgo://native_api?type=132'\n  targetApp: 'zlj',\n  universal: false, // 找靓机目前还不支持 universalLink\n  callStart: () => {\n    console.log('触发 开始唤起钩子')\n  },\n  callSuccess: () => {\n    console.log('触发 唤起成功钩子')\n  },\n  callFailed: () => {\n    console.log('触发 唤起失败钩子')\n  },\n  callDownload: () => {\n    console.log('触发 下载钩子')\n  },\n  callError: () => {\n    console.log('内部异常')\n  },\n})\n\n// 执行唤起\ncallApp.start()\n// 执行下载\ncallApp.download()\n```\n\n#####  2. 调用 api 时配置 options, 唤起 转转/找靓机\n\n该用法为 实例化CallApp类一次，通过 api 来配置 options，进行执行。\n此一般用于较复杂业务场景下，避免多次实例化而造成内存浪费。\n\n```javascript\n// 实例化一次\nconst callApp = new CallApp()\n// 在方法内进行参数配置\n\n// 唤起转转\ncallApp.start({\n  path: 'jump/shortVideo/videoHome/jump',\n  channelId: '',\n  deeplinkId: '',\n})\n\n// 唤起找靓机\ncallApp.start({\n  path: 'native_api?type=132',\n  // path: 'zljgo://native_api?type=132',\n  targetApp: 'zlj',\n  universal: false, // 找靓机、采货侠 目前还不支持 universalLink\n})\n\n// 下载转转\ncallApp.download({\n  targetApp: 'zz',\n  channelId: '',\n  deeplinkId: ''\n})\n\n// 下载找靓机\ncallApp.download({\n  targetApp: 'zlj',\n})\n```\n\n##### 3. 第三方配置（高阶）\n\n⚠️ 注意：\n\n3-1. 如果配置了 `customConfig` 参数，则非 hooks 参数（如 path，targetApp 等）的配置不再生效。\n\n3-2 `landingPage` 配置参数优先级大于 `downloadConfig`\n\n3-3 如果没有配置 `universalLink` 则 ios 端降级为 `schemeUrl`\n\n```javascript\n// 唤起支付宝\nconst callApp = new CallApp({\n  customConfig: {\n    schemeUrl: 'alipay://platformapi/startapp?appId=20000056', // 支付宝转账\n    landingPage: 'https://render.alipay.com/p/s/i', // 支付宝落地页（下载页）\n  },\n  callStart: () => {\n    console.log('触发 开始唤起钩子')\n  },\n  callSuccess: () => {\n    console.log('触发 唤起成功钩子')\n  },\n  callFailed: () => {\n    console.log('触发 唤起失败钩子')\n  },\n})\n\ncallApp.start()\n```\n\n##### 4. 插件配置（高阶）\n提供 use 方法, 方便用户插入 js 或者 自定义 CallApp 实例内部方法。并支持链式调用。\n\n使用示例：\n```javascript\nconst callApp = new CallApp(options)\n\ncallApp.use(function PluginA(app, optsA) {\n  const old = app.start\n\n  app.start = function() {\n    //\n    old.call(app) // 或者 old.call(app, options)\n  }\n}).use(function PluginB(app, optsB) {\n  //\n\n})\n```\n\n## 兼容性 😈\n\n### H5\n#### ios: [iphoneXR]\n\n\n| 环境          | 下载          | scheme/ulink 唤起(已装 app) | 失败回调(已装 app) | 成功回调(已装 app)       | 失败回调(未装 app) |\n| ------------- | ------------- | --------------------------- | ------------------ | ------------------------ | ------------------ |\n| safari        | 支持 location | ulink 支持                  | 不支持             | 支持                     | ulink不支持        |\n| qq 浏览器     | 支持 location | ulink 支持                  | 支持               | 支持                     | ulink不支持        |\n| uc 浏览器     | 支持 location | ulink 支持                  | 支持               | ulink支持, scheme 不支持 | ulink不支持        |\n| 百度浏览器    | 支持 location | ulink 支持, scheme 不支持   | 支持               | ulink支持 scheme 不支持  | ulink不支持        |\n| 夸克浏览器    | 支持 iFrame   | 不支持 ulink，支持 scheme   | 支持               | 支持                     | 支持               |\n| 谷歌浏览器    | 支持 location | ulink 支持                  | 支持               | 支持                     | ulink不支持        |\n| sougou 浏览器 | 不支持        | ulink 支持                  | 支持               | 支持                     | ulink不支持        |\n| wx            | 支持，应用宝  | ulink 支持, scheme 不支持   | 支持               | 支持                     | ulink不支持        |\n| weibo         | 不支持        | ulink 支持, scheme 不支持   | 支持               | ulink支持,scheme 不支持  | ulink不支持        |\n| qq            | 支持, 应用宝  | ulink 支持                  | 支持               | 支持                     | 支持               |\n\n#### android: [huawei-p30]\n\n\n| 环境          | 下载          | scheme 唤起(已装 app) | 失败回调(已装 app) | 成功回调(已装 app) | 失败回调(未装 app) |\n| ------------- | ------------- | --------------------- | ------------------ | ------------------ | ------------------ |\n| qq 浏览器     | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| uc 浏览器     | 支持 tagA     | 支持                  | 支持               | 支持               | 支持               |\n| 百度浏览器    | 支持 location | 不支持                | 支持               | 不支持             | 支持               |\n| 夸克浏览器    | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| sougou 浏览器 | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| 360 浏览器    | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| 华为浏览器    | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| wx            | 支持，应用宝  | 不支持                | 支持               | 不支持             | 支持               |\n| weibo         | 不支持        | 不支持                | 支持               | 不支持             | 支持               |\n| qq            | 支持, 应用宝  | 支持                  | 支持               | 支持               | 支持               |\n\n#### android: [mi-9]\n\n\n| 环境       | 下载          | scheme 唤起(已装 app) | 失败回调(已装 app) | 成功回调(已装 app) | 失败回调(未装 app) |\n| ---------- | ------------- | --------------------- | ------------------ | ------------------ | ------------------ |\n| qq 浏览器  | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| uc 浏览器  | 支持 tagA     | 支持                  | 支持               | 支持               | 支持               |\n| 百度浏览器 | 支持 location | 不支持                | 支持               | 不支持             | 支持               |\n| 夸克浏览器 | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| 360 浏览器 | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| 小米浏览器 | 支持 location | 支持                  | 支持               | 支持               | 支持               |\n| wx         | 支持，应用宝  | 不支持                | 支持               | 不支持             | 支持               |\n| weibo      | 不支持        | 不支持                | 支持               | 不支持             | 支持               |\n| qq         | 支持，应用宝  | 支持                  | 支持               | 支持               | 支持               |\n\n### native sdk\n\n#### ios / android\n\n\n|                         | 转转 | 采货侠 | 找靓机 | 卖家版 | 58app | 微信 |\n| ----------------------- | ---- | ------ | ------ | ------ | ----- | ---- |\n| 目标app: 转转           | x    | ✅      | ✅      | ✅      | ✅     | ✅    |\n| 目标app: 采货侠         | ✅    | x      | x      | x      | x     | x    |\n| 目标app: 找靓机         | ✅    | x      | x      | x      | x     | x    |\n| 目标app: 卖家版(已下架) | ✅    | x      | x      | x      | x     | x    |\n\n\n---\n\n\n### 公开文章\n[唤起 App 在转转的实践](https://mp.weixin.qq.com/s?__biz=MzU0OTExNzYwNg==&mid=2247486327&idx=1&sn=a4ed8b1b012638a60bd4065a6e5ee309)\n[复杂场景下唤起App实践](https://mp.weixin.qq.com/s?__biz=MzU0OTExNzYwNg==&mid=2247492140&idx=1&sn=9857ecdf80285020dd90fd3d26fb717d)\n\n\n### Bug or PR\n\n### Feature\n<!-- - [ ] 支持配置中心\n  - 未来可以引入配置中心的概念，方便对目标app进行统一配置管理、app平台相关逻辑的平滑处理，方便新增/移除目标app逻辑\n- [ ] 支持 android app-links(intent) 协议，以及面向未来的 deferAppLinks\n  - 目前此方案兼容性差（只有chrome支持)，暂且舍弃 -->\n","readmeFilename":"README.md"}