UNPKG

xx-common

Version:

the functions of yd common

1,664 lines (1,658 loc) 60.7 kB
// APP方法封装 import { localPath } from "../config/env"; import * as YdShare from "./share"; import Bridge from "./iosBridge"; import nativeJson from "./nativeInt"; const APP: { [funName: string]: any } = { middleFun(): any { // if (!window.tool.isYuedong()) { // window.global.toast("请打开悦动圈app进行操作"); // return // } let ag: string[] = [].slice.apply(arguments); let funName = ag.shift() as string; return APP[funName](...ag); }, /** * 在外部跳转app页面,参数需要encode。http://wiki.17yund.me/doku.php?id=ios_universallink * ios最好使用vc_name! * android使用native_int * @param {*} url 跳转到网页的链接 * @param {*} from 来源 * @param {*} action 调本地界面 * @param {*} vc_name 界面类名 * @param {*} vc_params 需要带给界面的参数(json字符串) * @param {*} vc_direct_url 这种模式可以直接找ios组员给参数值 * @param {*} native_int 方式 数字 * @param {*} native_params 方式 参数 * @param {*} marketDetectUrl 下载监测链接 * @param {*} downloadPage 下载页跳转。market:跳转到应用市场,home:跳转到官网首页。ios都是跳官网,因为同时弹出app store和app体验不好 */ jumpAppPage(urlObj: { url: any; from: any; action: any; vc_name: any; vc_params: any; vc_direct_url: any; native_int: any; native_params: any; marketDetectUrl: any; downloadPage?: string | undefined; }) { let { url, from, action, vc_name, vc_params, vc_direct_url, native_int, native_params, marketDetectUrl, downloadPage = "home", } = urlObj; if (window.tool.isIosWeb()) { // 使用 universal link打开app let jumpUrl = `https://uljump.51yund.com/openApp?downloadPage=${downloadPage}${ url ? "&url_inside=" + encodeURIComponent(url) : "" }${from ? "&from=" + encodeURIComponent(from) : ""}${ action ? "&action=" + encodeURIComponent(action) : "" }${action === "to_local_vc" ? "&vc_open_type=push" : ""}${ vc_name ? "&vc_name=" + encodeURIComponent(vc_name) : "" }${ vc_params ? "&vc_params=" + encodeURIComponent(JSON.stringify(vc_params)) : "" }${ vc_direct_url ? "&vc_direct_url=" + encodeURIComponent(vc_direct_url) : "" }${native_int ? "&native_int=" + encodeURIComponent(native_int) : ""}${ native_params ? "&native_params=" + encodeURIComponent(JSON.stringify(native_params)) : "" }${ marketDetectUrl ? "&marketDetectUrl=" + encodeURIComponent(JSON.stringify(marketDetectUrl)) : "" }`; window.location.href = jumpUrl; } else if (window.tool.isAndroidWeb()) { // 使用deeplink打开app window.location.href = `https://uljump.51yund.com/openApp?downloadPage=${downloadPage}${ url ? "&open_url=" + encodeURIComponent(url) : "" }${from ? "&from=" + encodeURIComponent(from) : ""}${ native_int ? "&native_int=" + encodeURIComponent(native_int) : "" }${ native_params ? "&native_params=" + encodeURIComponent(JSON.stringify(native_params)) : "" }${ marketDetectUrl ? "&marketDetectUrl=" + encodeURIComponent(JSON.stringify(marketDetectUrl)) : "" }`; } else { // pc端打开 window.location.href = "https://www.51yund.com/?from=open_app"; } }, /****************************************************************************************** * **********客户端交互url********* * 函数名使用"yd"开始跟其他功能函数区分 * ******************************************************************************************/ //打开nativeInt 对应的页面,通过名字打开的方式 openNativeInt(name: string | number, parm: any = {}) { if (!window.tool.isYuedong()) return window.global.toast("亲,请在app内打开哦~"); let nativeObj = (nativeJson as any)[name]; if (!nativeObj) { return window.global.toast("请检查传入的NativeInt名字"); } let needArr = nativeObj.need; if (needArr && needArr.length > 0) { //需要传参数 for (let m = 0; m < needArr.length; m++) { let values = parm[needArr[m].key]; //目标值 if (needArr[m].require && !values) { //需要填而没有填 return window.global.toast(needArr[m].key + "为必填项,请检查"); } if (values && typeof values !== needArr[m].type) { //填了而类型不对 return window.global.toast( needArr[m].key + "类型必须为" + needArr[m].type ); } } } let paramStr = ""; for (let i in parm) { paramStr += "&" + i + "=" + parm[i]; } if (window.tool.isIosWeb()) { let code = nativeObj.code || nativeObj.ios; // 这里临时注释掉,ios新方法里没有注册这个 // if(checkIosBridgeVailable()){ // iosBridgeCall('native_int_jump', Object.assign({native_int: code}, parm)) // return; // } let path = "/local_call?local_action=native_int_jump&native_int=" + code + paramStr; window.tool.iframeLocalCall(path); return; } else { let nativeInt = nativeObj.code || nativeObj.android; if ( window.YDJSInterface && "jumpLocalByActionInfo" in window.YDJSInterface ) { let parmObj: any = { native_int: nativeInt, }; if (paramStr) { parmObj.params = paramStr.slice(1); //去掉第一位的& } window.YDJSInterface.jumpLocalByActionInfo(JSON.stringify(parmObj)); return; } } window.global.toast("亲,请升级悦动圈app版本"); }, //打开nativeInt页面,通过接口返回code的方式打开 openNativeIntByCode(obj: any = {}) { if (!window.tool.isYuedong()) return window.global.toast("亲,请在app内打开哦~"); if (window.tool.isIosWeb()) { let path = "/local_call?local_action=native_int_jump&native_int=" + obj.native_int; if (obj.params) path += "&" + obj.params; window.tool.iframeLocalCall(path); return; } else { if ( window.YDJSInterface && "jumpLocalByActionInfo" in window.YDJSInterface ) { window.YDJSInterface.jumpLocalByActionInfo(JSON.stringify(obj)); return; } } window.global.toast("亲,请升级悦动圈app版本"); }, //app打开微信小程序 openMiniApp(originId: any, path: any, type: string) { //type 0:正式,1:测试,2:预览 if ( window.tool.isAndroidWeb() && "jumpWxMiniProgram" in window.YDJSInterface ) { window.YDJSInterface.jumpWxMiniProgram( String(originId), String(path), parseInt(type) ); return; } if (window.tool.isIosWeb() && checkIosBridgeVailable()) { iosBridgeCall("open_wechat_mini_program", { user_name: originId, path: path, type: type, }); return; } window.global.toast("亲,请升级悦动圈app版本"); }, goMyFitness() { if (window.tool.isYuedong()) { if (window.tool.isIosWeb()) { let path = "/local_call?local_action=to_local_vc&&arg0=YDFitUserPlanViewController&arg1=push"; window.tool.iframeLocalCall(path); } else { window.YDJSInterface.jumpLocalByActionInfo("{native_int: 601}"); } } }, // 去资讯tab goInfoTab() { if (window.tool.isYuedong()) { if (window.tool.isIosWeb()) { window.tool.iframeLocalCall( `/local_call?local_action=to_local_vc&vc_direct_url=%2FYDBaseTabBarController%2FYDCTCircleRootViewController` ); return; } else if ( window.YDJSInterface && "jumpLocalByActionInfo" in window.YDJSInterface ) { let obj = { native_int: 503, }; window.YDJSInterface.jumpLocalByActionInfo(JSON.stringify(obj)); return; } window.global.toast("亲,请升级悦动圈app版本"); } }, setTitle(title: string) { if (!window.tool.isIosWeb() || !window.tool.isYuedong()) return; let path = "/local_call?local_action=set_vc_title&arg0=" + title; window.tool.iframeLocalCall(path); }, shareBitmap(obj: { data: any; callback: any }) { let shareObj = obj.data; let cabk = obj.callback; if (!shareObj.base64Img) { window.global.toast("分享图片暂未生成!"); return; } if (window.tool.isAndroidWeb()) { var pic = shareObj.base64Img.replace(/^.*?,/, ""); if ( window.YDJSInterface && "shareBase64ImgByPopupWindow" in window.YDJSInterface ) { window.YDJSInterface.shareBase64ImgByPopupWindow( pic, shareObj.shareTitle, shareObj.shareContent, shareObj.shareUrl ); } else { window.global.toast("请升级悦动圈app分享!"); } return; } shareObj.sharePicUrl = shareObj.base64Img; YdShare.setSimpleShare(shareObj, function () { if (cabk) { cabk(); } }); YdShare.onShare(this); }, // 获取app定位 ydGetPosition(cb: any) { if (window.tool.isYuedong()) { APP.ydGetPositionCb = cb; let version = window.tool.version; if (window.tool.isAndroidWeb()) { if (window.YDJSInterface && "requestLocation" in window.YDJSInterface) { window.YDJSInterface.requestLocation(); } } else { if (checkIosBridgeVailable()) { let cbSuccAbj = { callback: "onLocationRes" }; iosBridgeCall("request_location", cbSuccAbj); return; } let url = localPath + "/local_call?local_action=request_location&callback=onLocationRes"; window.tool.iframeLocalCall(url); } let timer: any = setTimeout(() => { if (APP.ydGetPositionCb) { //客户端没有回调,可能是被禁止获取定位 window.tool.getBrowserPosition(cb); } timer = null; }, 4000); } else { window.tool.getBrowserPosition(cb); } }, // 打开新窗口 openUrlByNewWindow: function (url: string) { if (!url) return; if (url.indexOf("http:") == -1 && url.indexOf("https:") == -1) { url = document.location.protocol + "//" + document.domain + url; } if (window.tool.isYuedong()) { if (window.YDJSInterface && "openWindow" in window.YDJSInterface) { window.YDJSInterface.openWindow(url); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("open_url_new_window", { arg0: url }); return; } url = encodeURIComponent(url); let path = "/local_call?local_action=open_url_new_window&arg0=" + url; window.tool.iframeLocalCall(path); return; } } window.location.href = url; }, ydVisitUserInfo(args: any) { if (!window.tool.isYuedong()) { window.global.toast("亲,请在app内打开哦~"); return; } if (window.tool.isIosWeb() && checkIosBridgeVailable()) { iosBridgeCall("personinfo", args.data); return; } window.location.href = "/local_call?local_action=personinfo&arg0=" + args.data.arg0; }, //跳转心肺复苏采集详情页 ydHeartLung(nativeInt: any, enterpriseId: any) { if (window.tool.isIosWeb()) { let path = `/local_call?local_action=native_int_jump&native_int=${nativeInt}&enterprise_id=${enterpriseId}`; window.tool.iframeLocalCall(path); return; } if ( window.YDJSInterface && "openLocalPageAndEnterprise" in window.YDJSInterface ) { window.YDJSInterface.openLocalPageAndEnterprise(nativeInt, enterpriseId); return; } window.global.toast("亲,请升级悦动圈app版本"); }, //跳转课外体育首页 ydHome() { if (window.tool.isIosWeb() && checkIosBridgeVailable()) { iosBridgeCall("jump2footprint", { arg0: 0 }); return; } window.location.href = "/local_call?local_action=jumpToAppMain&arg0=0"; }, //开始走路 ydStartWalk() { if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("jump2footprint", { arg0: 0 }); return; } } window.location.href = "/local_call?local_action=jump2footprint&arg0=0"; }, //开始跑步-室外跑 ydStartRun(fromVal: string) { if (window.tool.isAndroidWeb()) { fromVal = fromVal || "web"; window.location.href = "/local_call?local_action=start_run&from=" + fromVal; return; } iosGoSport(0); }, //开始跑步-室内跑 ydStartRunInRoom(fromVal: string) { fromVal = fromVal || "web"; if (window.tool.isAndroidWeb()) { if (window.YDJSInterface && "startRunInRoom" in window.YDJSInterface) { window.YDJSInterface.startRunInRoom(fromVal); return; } } if ( window.tool.isIosWeb() && window.tool.versionCompare(window.tool.version, "5.10.3") >= 0 ) { APP.openNativeInt("StartRunInRoom"); return; } window.global.toast( "您暂未更新APP,无法体验此功能。请下载最新版悦动圈APP后,重新尝试。" ); }, // 去徒步(android不能直接开始) ydStartHike(fromVal: string) { if (window.tool.isAndroidWeb()) { // android新版本直接开始 if (window.tool.versionCompare(window.tool.version, "3.3.4.2.0") >= 0) { fromVal = fromVal || "web"; window.location.href = "/local_call?local_action=start_hike&from=" + fromVal; return; } if (window.YDJSInterface && "startHikeSport" in window.YDJSInterface) { fromVal = fromVal || "web"; window.YDJSInterface.startHikeSport(fromVal); return; } } iosGoSport(6); }, // 去骑行 ydStartRide(fromVal: string) { if (window.tool.isAndroidWeb()) { fromVal = fromVal || "web"; window.location.href = "/local_call?local_action=sport_ride&from=" + fromVal; return; } iosGoSport(3); }, // 跳转平板撑 ydStartPlank(params: any) { let _params = Object.assign( {}, { video_id: 29, page_type: 0, move_type: 2, android_ver: "3.3.2.2.2", ios_ver: "5.1.1", }, params ); APP.ydStartAIMatch(_params); }, // 跳转俯卧撑 ydStartPushUps(params: any) { let _params = Object.assign( {}, { video_id: 33, page_type: 0, move_type: 2, android_ver: "3.3.2.2.2", ios_ver: "5.1.1", }, params ); APP.ydStartAIMatch(_params); }, // 跳转开合跳 ydStartOACJump(params: any) { let _params = Object.assign( {}, { video_id: 2, page_type: 0, move_type: 1, android_ver: "3.3.2.2.2", ios_ver: "5.1.1", }, params ); APP.ydStartAIMatch(_params); }, // 跳转仰卧起坐 ydStartSitUps(params: any) { let _params = Object.assign( {}, { video_id: 40, page_type: 0, move_type: 2, android_ver: "3.3.2.2.2", ios_ver: "5.1.7", }, params ); APP.ydStartAIMatch(_params); }, // 跳转引体向上 ydStartPullUps(params: any) { let _params = Object.assign( {}, { video_id: 44, page_type: 0, move_type: 1, android_ver: "3.3.2.2.2", ios_ver: "5.1.7", }, params ); APP.ydStartAIMatch(_params); }, // 跳转跳绳 ydStartJumpSkip(params: any) { let _params = Object.assign( {}, { video_id: 45, page_type: 0, move_type: 1, android_ver: "3.3.2.2.2", ios_ver: "5.1.7", }, params ); APP.ydStartAIMatch(_params); }, // 跳转左体侧运动 ydStartLeftSport(params: any) { let _params = Object.assign( {}, { video_id: 4, page_type: 0, move_type: 1, android_ver: "3.3.2.2.2", ios_ver: "5.1.7", }, params ); APP.ydStartAIMatch(_params); }, // 跳转右体侧运动 ydStartRightSport(params: any) { let _params = Object.assign( {}, { video_id: 5, page_type: 0, move_type: 1, android_ver: "3.3.2.2.2", ios_ver: "5.1.7", }, params ); APP.ydStartAIMatch(_params); }, // TODO 运动类型会越来越多,需要统一份配置,不做特殊函数处理 // 跳转AI运动开始界面 ydStartAIMatch(params: { video_id: any; page_type: any; match_id: any; mode: any; limit_times: any; complete_tip: any; move_type: any; android_ver: any; ios_ver: any; difficulty: any; groupRunId: any; group_id: any; more_params: any; }) { // videoId平板撑29 俯卧撑33,开合跳 2 if (!window.tool.isYuedong()) return window.global.toast( "本功能需要在悦动圈APP内使用。请下载最新版悦动圈APP后,重新尝试。" ); let videoId = Number(params.video_id); // 视频ID let pageType = Number(params.page_type); // 非C端赛事类型 0,平板撑C端赛事类型 pageType=5,俯卧撑C端赛事类型pageType=6 let matchId = params.match_id ? Number(params.match_id) : 0; // C端赛事活动ID 此处不传给iOS B端传0 let mode = params.mode ? Number(params.mode) : 0; // AI运动模式 0 普通模式 2 限时模式 let limitTimes = params.limit_times && mode ? Number(params.limit_times) : 0; // 多长时间自动结束 let completeTip = params.complete_tip ? params.complete_tip : ""; // 结束后的提示 let moveType = Number(params.move_type); // 健身动作:1-竖向;2-横向 let androidVer = params.android_ver ? params.android_ver : "0"; // 所需Android版本 let iosVer = params.ios_ver ? params.ios_ver : "0"; // 所需ios版本 let difficulty = params.difficulty ? Number(params.difficulty) : 0; // 难易模式 0 普通 1 简单 (安卓新增) let groupRunId = params.groupRunId ? Number(params.groupRunId) : 0; // 广播体操id let group_id = params.group_id ? Number(params.group_id) : 0; let more_params = params.more_params ? JSON.stringify(params.more_params) : JSON.stringify({}); //其他参数的对象 // 跳转安卓的新方法 if ( window.YDJSInterface && "toAICoachSingleTrainActivity" in window.YDJSInterface && window.tool.versionCompare(window.tool.version, androidVer) >= 0 ) { if (window.tool.versionCompare(window.tool.version, "5.9.0.2.5") >= 0) { let _params = { video_id: videoId, match_id: matchId, page_type: pageType, limit_time: limitTimes, mode: mode, complete_tip: completeTip, move_type: moveType, more_params: more_params, difficulty: difficulty, group_id: group_id, }; window.YDJSInterface.toAICoachSingleTraining(JSON.stringify(_params)); } else if ( window.tool.versionCompare(window.tool.version, "5.7.0.0.1") >= 0 ) { window.YDJSInterface.toAICoachSingleTrainActivity( videoId, matchId, pageType, limitTimes, moveType, difficulty, mode, groupRunId, more_params ); } else { window.YDJSInterface.toAICoachSingleTrainActivity( videoId, matchId, pageType, limitTimes, moveType, difficulty, mode, groupRunId ); } return; } let _params = { video_id: videoId, limit_times: limitTimes, mode: mode, complete_tip: completeTip, move_type: moveType, more_params: more_params, video_group_id: group_id, }; // 兼容iOS版本问题 if ( window.tool.isIosWeb() && window.tool.versionCompare(window.tool.version, "5.8.5") == 0 ) { APP.openNativeInt( "AIMatch", Object.assign({}, _params, { group_id: videoId }) ); return; } if ( window.tool.isIosWeb() && window.tool.versionCompare(window.tool.version, iosVer) >= 0 ) { APP.openNativeInt("AIMatch", _params); return; } window.global.toast( "您暂未更新APP,无法体验此功能。请下载最新版悦动圈APP后,重新尝试。" ); }, /*** * 跳转运动记录封装 * name值有: * runSportRcord 跳转跑步运动记录 * ridingSportRcord 跳转骑行运动记录 * toreroSportRcord 跳转徒步运动记录 * fitnessSportRcord 跳转健身运动记录 * stepSportRcord 跳转计步运动记录 */ ydRecordMatch(name: any) { APP.openNativeInt(name); }, ydAiRecord() { if (window.tool.isIosWeb()) { let path = "/local_call?local_action=to_local_vc&arg0=YDAICoachHistoryRootViewController"; window.tool.iframeLocalCall(path); return; } if ( window.YDJSInterface && "toAiCoachHistoryList" in window.YDJSInterface ) { window.YDJSInterface.toAiCoachHistoryList(); return; } window.global.toast("亲,请升级悦动圈app版本"); }, // 跳转AI运动动作列表(可用于开始AI运动) ydGotoAICoach() { if (window.tool.isIosWeb()) { let path = "/local_call?local_action=native_int_jump&native_int=691"; window.tool.iframeLocalCall(path); return; } if (window.YDJSInterface && "toAICoach" in window.YDJSInterface) { window.YDJSInterface.toAICoach(); return; } if (window.tool.isYuedong()) { window.global.toast("亲,请升级悦动圈app版本"); return; } window.global.toast( "亲,本功能需要在悦动圈APP内使用。请下载最新版悦动圈APP后,重新尝试。" ); }, //打开话题落地页 例子:#零零落落# ydGoTheme(args: { data: { themeId: string; headerViewTitle: any } }) { let circleId: any = 0; if ( window.tool.isAndroidWeb() && window.YDJSInterface && "goToTopicListToEditor" in window.YDJSInterface ) { window.YDJSInterface.goToTopicListToEditor( parseInt(args.data.themeId), args.data.headerViewTitle, parseInt(circleId), true, true, true ); return; } if (window.tool.isIosWeb()) { let themeObj = args.data; let topicIdObj: any = { showProgressForEditor: 1, confineTapForEditor: 1, aimCirclesForEditor: circleId, }; Object.assign(topicIdObj, themeObj); topicIdObj = JSON.stringify(topicIdObj); topicIdObj = encodeURIComponent(topicIdObj); if (checkIosBridgeVailable()) { let params = { arg0: "YDTopicViewController", arg1: 1, arg2: topicIdObj, }; iosBridgeCall("to_local_vc", params); return; } window.location.href = "/local_call?local_action=to_local_vc&arg0=YDTopicViewController&arg1=push&arg2=" + topicIdObj; return; } window.global.toast("亲,请升级悦动圈app版本"); }, //去发布动态 支持带图 ydAddImgToClentTopic(args: { data: any }) { // argsObj = { // circleId:1,//ios 话题发布到的圈子ID 带上id限制只能发到该圈子 不带可以选择用户加入的任何圈子 // //android则根据androidCanSelectCircle来判断是否可以选择圈子 androidCanSelectCircle=false的时候必须要带circleId 不然就不能发布成功啦 因为没有圈子可以选 // iosShowProgress:1,//是否显示发布动画 // base64Array:[],//base64图片数组 // urlArray:[],//url图片数组 安卓需要搭配androidPhotoIds一起使用才行 // androidPhotoIds:[],//安卓话题发布图片 urlArray数组 与photoId数组需一一对应 // androidShowProgress:true,//是否跳转进度页 // androidCanSelectTopic:true,//是否可以选择话题 // androidCanSelectCircle:true,//是否可以选择圈子 // aimTagItemObj:{themeId:"",themeTitle:""}//需要带话题发布的情况下 带上该对象 // } let argsObj = args.data; let version = window.tool.version; if (window.YDJSInterface) { let formatBase64Arr: any = []; if (argsObj.base64Array.length > 0) { argsObj.base64Array.forEach( (element: string, index: string | number) => { formatBase64Arr[index] = element.replace(/^.*?,/, ""); } ); } let themeId = parseInt(argsObj.aimTagItemObj.sub_theme_id) || 0; let themeTitle = "#" + argsObj.aimTagItemObj.tag + "#" || ""; if ( formatBase64Arr.length > 0 || (argsObj.urlArray.length > 0 && argsObj.androidPhotoIds.length > 0) ) { if ("publishPhotoDynamicToEditor" in window.YDJSInterface) { window.YDJSInterface.publishPhotoDynamicToEditor( themeId, themeTitle, parseInt(argsObj.circleId), argsObj.androidShowProgress, argsObj.androidCanSelectTopic, argsObj.androidCanSelectCircle, formatBase64Arr, argsObj.urlArray, argsObj.androidPhotoIds ); } return; } if ("publishDynamicToEditor" in window.YDJSInterface) { window.YDJSInterface.publishDynamicToEditor( themeId, themeTitle, parseInt(argsObj.circleId), argsObj.androidShowProgress, argsObj.androidCanSelectTopic, argsObj.androidCanSelectCircle ); return; } } if ( window.tool.isIosWeb() && window.tool.versionCompare(version, "4.6.6") >= 0 ) { var imagesFromWeb = { imagesBase64Array: argsObj.base64Array, imagesURLArray: argsObj.urlArray, }; let aimTagItemObj = JSON.stringify(argsObj.aimTagItemObj); if (argsObj.base64Array.length > 0 || argsObj.urlArray.length > 0) { aimTagItemObj = JSON.parse(aimTagItemObj); } var topicIdObj: any = { commingSourceType: 7, showProgressVCWhenUpload: argsObj.iosShowProgress, aimTagItem: aimTagItemObj, aimCircleIds: argsObj.circleId, imagesFromWeb: imagesFromWeb, }; topicIdObj = JSON.stringify(topicIdObj); topicIdObj = encodeURIComponent(topicIdObj); if (checkIosBridgeVailable()) { let params = { arg0: "YDCircleEditorViewController", arg1: "push", arg2: topicIdObj, }; iosBridgeCall("to_local_vc", params); return; } let path = "/local_call?local_action=to_local_vc&arg0=YDCircleEditorViewController&arg1=push&arg2=" + topicIdObj; window.tool.iframeLocalCall(path); return; } window.global.toast("亲,请升级悦动圈app版本"); }, // 客户端下载base64图片 ydDownloadImgBase64(base64: string) { if (window.YDJSInterface && "saveBase64Image" in window.YDJSInterface) { window.YDJSInterface.saveBase64Image(base64); window.global.toast("图片下载中,请下拉系统菜单查看进度~"); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("download_img", { args0: base64 }); return; } let path = "/local_call?local_action=download_img&args0=" + base64; window.tool.iframeLocalCall(path); return; } window.global.toast("请升级版本后重试"); }, //客户端下载图片链接 ydDownloadImgSrc(picUrl: string) { // 下载图片后保存到相册 if ( window.YDJSInterface && "downloadImageToAlbum" in window.YDJSInterface ) { window.YDJSInterface.downloadImageToAlbum(picUrl); return; } // 下载图片后,但是没有保存到相册 if (window.YDJSInterface && "downloadBySystem" in window.YDJSInterface) { window.YDJSInterface.downloadBySystem(picUrl); window.global.toast("图片下载中,请下拉系统菜单查看进度~"); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("download_img", { args0: picUrl }); return; } let path = "/local_call?local_action=download_img&args0=" + picUrl; window.tool.iframeLocalCall(path); return; } window.global.toast("请升级版本后重试"); }, //web跳转客户端账号绑定 ydGoBind() { if (window.tool.isAndroidWeb()) { window.location.href = "/local_call?local_action=account_bind"; return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("account_bind"); return; } window.location.href = "/local_call?local_action=account_bind"; return; } window.global.toast("当前软件版本不支持跳转,请升级最新版本"); }, //web跳转客户端邀请好友 ydInviteNew(circleId: string) { if (window.tool.isAndroidWeb()) { window.location.href = "/local_call?local_action=invite_friend_circle&arg0=" + circleId; return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("invite_friend_circle", { args0: circleId }); return; } window.location.href = "/local_call?local_action=invite_friend_circle"; return; } window.global.toast("当前软件版本不支持跳转,请升级最新版本"); }, //获取设备信息 ydGetDeviceInfo() { let deviceInfo = {}; if (window.tool.isIosWeb()) { deviceInfo = { ver: window.tool.getCookieValue("ver"), //app版本号 device_id: window.tool.getCookieValue("device_id"), //app版本号 network_status: window.tool.getCookieValue("network_status"), //网络状况 //-1 未知 0 不可达没网络 1 在蜂窝网(2,3,4G等) 2 WiFi language: window.tool.getCookieValue("language"), timezone: window.tool.getCookieValue("timezone"), locale: window.tool.getCookieValue("locale"), //国家 phone_type: window.tool.getCookieValue("phone_type"), //手机型号 os_version: window.tool.getCookieValue("os_version"), //系统版本 longitude: window.tool.getCookieValue("longitude"), latitude: window.tool.getCookieValue("latitude"), timestamp: window.tool.getCookieValue("timestamp"), scale: window.tool.getCookieValue("scale"), //屏幕倍率 screen_width: window.tool.getCookieValue("screen_width"), //屏幕宽度 单位为屏幕点,实际像素为screen_width*scale screen_height: window.tool.getCookieValue("screen_height"), //屏幕高度 单位为屏幕点,实际像素为screen_height*scale channel: window.tool.getCookieValue("channel"), //渠道 appstore之类的 }; } if ( window.tool.isAndroidWeb() && window.YDJSInterface && "getDeviceInfo" in window.YDJSInterface ) { deviceInfo = JSON.parse(window.YDJSInterface.getDeviceInfo()); } return deviceInfo; }, // 获取ios APP信息 getYodoIosInfo(cb: string) { if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("get_yodo_info", { callback: cb }); return; } window.location.href = "/local_call?local_action=get_yodo_info&callback=" + cb; return; } }, //关闭当前webView 退回客户端进web的页面 ydBackWebEntry(hideTip: any) { if ( window.tool.isAndroidWeb() && "closeHeadlineRule" in window.YDJSInterface && "closeWebBrowser" in window.YDJSInterface ) { window.YDJSInterface.closeWebBrowser(); window.YDJSInterface.closeHeadlineRule(); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("close_window"); return; } window.location.href = "/local_call?local_action=close_window"; return; } if (!hideTip) { window.global.toast("亲,当前版本不支持,请更新版本"); } }, //页面显示 回调方法 ydShowPage() { // operatePageCb('onShow'); }, ydHidePage() { // operatePageCb('onHide'); }, ydWillShowPage() { // operatePageCb('onWillShow'); }, ydWillHidePage() { // operatePageCb('onWillHide'); }, //打开勋章馆 ydOpenModel() { if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { let params = { arg0: "YDAchievementRootViewController", arg1: "push", arg2: "", }; iosBridgeCall("to_local_vc", params); return; } window.location.href = "/local_call?local_action=to_local_vc&arg0=YDAchievementRootViewController&arg1=push&arg2="; return; } if ("gotoAchievement" in window.YDJSInterface) { window.YDJSInterface.gotoAchievement(); return; } }, //客户端保存某个DOM 到相册 ydDownloadImg(domObj: { getBoundingClientRect: () => { (): any; new (): any; top: any; left: any; width: any; height: any; }; }) { // domObj dom节点 在vue中使用 this.$refs.XXX; // pointXRadio dom x轴原点 相对于屏幕宽的 比例 0~1 // pointYRadio dom y轴原点 相对于屏幕高的 比例 0~1, // dowWidthRadio dom宽度 相对于屏幕宽的 比例 0~1, // dowHeightRadio dom高度 相对于屏幕高的 比例 0~1 // 安卓的高是相对于clientHeight ios的高是相对于文档的高度 document.body.scrollHeight // 这四个值类型不要进行parsInt 或者 parseFloat //如需全屏截图 起点为0,0,1,1 let clientHeight = document.documentElement.clientHeight || document.body.clientHeight; let clientWidth = document.documentElement.clientWidth || document.body.clientWidth; let offsetTop = domObj.getBoundingClientRect().top; let offsetleft = domObj.getBoundingClientRect().left; let domWidth = domObj.getBoundingClientRect().width; let domHeight = domObj.getBoundingClientRect().height; let pointXRadio = offsetleft / clientWidth; let pointYRadio = offsetTop / clientHeight; let dowWidthRadio = domWidth / clientWidth; let dowHeightRadio = domHeight / clientHeight; let version = window.tool.version; if ( window.tool.isAndroidWeb() && window.YDJSInterface && "saveShareBitmap" in window.YDJSInterface ) { window.YDJSInterface.saveShareBitmap( pointXRadio, pointYRadio, dowWidthRadio, dowHeightRadio ); return; } if ( window.tool.isIosWeb() && window.tool.versionCompare(version, "4.2.3") >= 0 ) { pointYRadio = offsetTop / document.body.scrollHeight; dowHeightRadio = domHeight / document.body.scrollHeight; // window.location.href = "/local_call?local_action=download_img_base_64&arg0="+imgData; var topicIdObj = "{" + "{" + pointXRadio + "," + pointYRadio + "}" + "," + "{" + dowWidthRadio + "," + dowHeightRadio + "}" + "}"; topicIdObj = JSON.stringify(topicIdObj); topicIdObj = encodeURIComponent(topicIdObj); if (checkIosBridgeVailable()) { let params = { arg0: topicIdObj }; iosBridgeCall("download_img_get_web_image", params); return; } window.location.href = "/local_call?local_action=download_img_get_web_image&arg0=" + topicIdObj; return; } window.global.toast("亲,当前版本不支持,请更新版本"); }, // 跳转到客户端加入圈子页面 ydGoCircle() { let userId = window.tool.getYdUserKey("user_id"); let url = "https://circle.51yund.com/circleMain/searchCircle?user_id=" + userId + "&circle_id=8&tab=1"; if (window.tool.isIosWeb() && window.tool.isYuedong()) { if (checkIosBridgeVailable()) { let params = { arg0: "YDCTFindMoreRootViewController" }; iosBridgeCall("to_local_vc", params); return; } url = "/local_call?local_action=to_local_vc&arg0=YDCTFindMoreRootViewController"; window.tool.iframeLocalCall(url); return; } window.location.href = url; }, //使用外部浏览器打开链接 ydOpenUrlByBrowser(url: string) { if ( window.tool.isAndroidWeb() && window.YDJSInterface && "openUrlByBrowser" in window.YDJSInterface ) { window.YDJSInterface.openUrlByBrowser(url); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("open_url_by_safari", { arg0: url }); return; } let path = "/local_call?local_action=open_url_by_safari&arg0=" + encodeURIComponent(url); window.tool.iframeLocalCall(path); return; } window.location.href = url; }, //当前网络是否是wifi isWifi() { let isWifi = false; if ( window.tool.isAndroidWeb() && window.YDJSInterface && "isHasConnectedWifi" in window.YDJSInterface ) { isWifi = window.YDJSInterface.isHasConnectedWifi(); } if (window.tool.isIosWeb()) { let networkStatue = window.tool.getCookieValue("network_status"); if (networkStatue == 2) { isWifi = true; } else { isWifi = false; } } return isWifi; }, //下拉刷新开关 pullRefresh(flag: string) { //falg 1禁用下拉刷新,0 开启 if (window.tool.isIosWeb()) { setTimeout(() => { if (checkIosBridgeVailable()) { iosBridgeCall("hide_pull_refresh", { arg0: flag }); return; } let url = "/local_call?local_action=hide_pull_refresh&arg0=" + flag; //arg0=1禁用下拉刷新,0未默认开启 window.tool.iframeLocalCall(url); }, 500); return; } if (window.YDJSInterface) { if ("setPageRefreshAble" in window.YDJSInterface) { window.YDJSInterface.setPageRefreshAble(!flag); } else if ("setPageRefresh" in window.YDJSInterface) { window.YDJSInterface.setPageRefresh(!flag); } } }, //跳转到话题详情 jumpTopicSubject(topicId: string, circle_id: string, videoFlag: string) { //videoFlag 0 普通话题(话题 视频)1 小视频 视频列表 let url = "http://circle.51yund.com/circleDiscussion?topic_id=" + topicId + "&hide_circle=true&oper_type=false"; if (window.tool.isYuedong()) { if (window.tool.isAndroidWeb()) { if ("jumpToArticleDetail" in window.YDJSInterface) { window.YDJSInterface.jumpToArticleDetail( parseInt(topicId), parseInt(videoFlag), parseInt(circle_id), false, "reloadFunc" ); return; } if ("jumpTopicArticleDetail" in window.YDJSInterface) { window.YDJSInterface.jumpTopicArticleDetail( parseInt(topicId), parseInt(videoFlag) ); return; } } if (window.tool.isIosWeb()) { let version = window.tool.version; if (window.tool.versionCompare(version, "3.6.9") >= 0) { let topicIdObj: any = { topicId: topicId, circleId: circle_id, accessToManage: false, sourceWebURL: window.location.href, }; topicIdObj = JSON.stringify(topicIdObj); topicIdObj = encodeURIComponent(topicIdObj); if (checkIosBridgeVailable()) { let params = { arg0: "YDCircleDetailViewController", arg1: "push", arg2: topicIdObj, }; iosBridgeCall("to_local_vc", params); return; } let path = "/local_call?local_action=to_local_vc&arg0=YDCircleDetailViewController&arg1=push&arg2=" + topicIdObj; window.tool.iframeLocalCall(path); return; } } } location.href = url; }, //跳转到客户端视频播放列表 jumpToVideoList(topicId: string, from: any) { let url = "https://sslwxsharecircle.51yund.com/topic/shareVideo?topic_id=" + topicId + "&is_share=true"; if (window.tool.isYuedong()) { if (window.tool.isAndroidWeb()) { if ("openCircleVideo" in window.YDJSInterface) { window.YDJSInterface.openCircleVideo(topicId, 3, false); return; } if ("openCircleVideoList" in window.YDJSInterface) { window.YDJSInterface.openCircleVideoList(topicId, 3); return; } } let version = window.tool.version; if (window.tool.versionCompare(version, "4.0.9") >= 0) { var topicIdObj: any = { topicID: topicId, from: from }; topicIdObj = JSON.stringify(topicIdObj); topicIdObj = encodeURIComponent(topicIdObj); if (checkIosBridgeVailable()) { let params = { arg0: "YDVideoPlayingListViewController", arg1: "push", arg2: topicIdObj, }; iosBridgeCall("to_local_vc", params); return; } window.location.href = "/local_call?local_action=to_local_vc&arg0=YDVideoPlayingListViewController&arg1=push&arg2=" + topicIdObj; return; } } window.location.href = url; }, //跳转到客户端健身计划页面 jumpClientHealthVideo(args: { data: { planId: string; userPlanId: string }; }) { //operType 默认“my” if (window.tool.isAndroidWeb()) { if ("gotoPrescriptionPlan" in window.YDJSInterface) { window.YDJSInterface.gotoPrescriptionPlan( parseInt(args.data.planId), parseInt(args.data.userPlanId), "my" ); return; } if ("gotoFitnessPlan" in window.YDJSInterface) { window.YDJSInterface.gotoFitnessPlan( parseInt(args.data.planId), parseInt(args.data.userPlanId), "my" ); return; } } if (window.tool.isIosWeb()) { var jumpClientObj: any = args.data; jumpClientObj = JSON.stringify(jumpClientObj); jumpClientObj = encodeURIComponent(jumpClientObj); if (checkIosBridgeVailable()) { let params = { arg0: "YDFitPlanDetailViewController", arg1: "push", arg2: jumpClientObj, }; iosBridgeCall("to_local_vc", params); return; } let path = "/local_call?local_action=to_local_vc&arg0=YDFitPlanDetailViewController&arg1=push&arg2=" + jumpClientObj; window.tool.iframeLocalCall(path); return; } window.global.toast("亲,当前版本不支持,请更新版本"); }, //跳转到web健身计划页面 jumpClientHealthVideoCourse(args: any) { if ( window.tool.isAndroidWeb() && window.YDJSInterface && "openCoursePlayer" in window.YDJSInterface ) { window.YDJSInterface.openCoursePlayer(513, args.data.course_id); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { let params = { native_int: 513 }; Object.assign(params, args.data); iosBridgeCall("native_int_jump", params); return; } let path = "/local_call?local_action=native_int_jump&native_int=513&course_id=" + args.data.course_id + "&plan_id=" + args.data.planId + "&is_user_plan=1&user_plan_id=" + args.data.userPlanId + "&day_time=" + args.data.day_time; window.tool.iframeLocalCall(path); return; } window.global.toast("亲,当前版本不支持,请更新版本"); }, //跳转到反馈页面 gotofeed() { if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("to_feedback"); return; } let url = "/local_call?local_action=to_feedback"; return window.tool.iframeLocalCall(url); } if ( window.tool.isAndroidWeb() && window.YDJSInterface && "goToAliFeedBack" in window.YDJSInterface ) { return window.YDJSInterface.goToAliFeedBack(); } window.global.toast("请打开悦动圈app进行反馈"); }, //扫描二维码 openScanCode(args: { data: { succ: any } }) { APP.scanQrcodeCb = args.data.succ; if ( window.tool.isAndroidWeb() && window.YDJSInterface && "openQRCodeScan" in window.YDJSInterface ) { window.YDJSInterface.openQRCodeScan(); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { return iosBridgeCall("qr_code", { arg0: "greenroad" }); } let url = "local_call?local_action=qr_code&arg0=greenroad"; window.tool.iframeLocalCall(url); return; } window.global.toast("请升级最新版本使用该功能~"); }, //运动数据上报 tryRunDataReport(args: any) { if ( window.tool.isAndroidWeb() && "tryRunDataReport" in window.YDJSInterface ) { APP.androidReportCb = args.data.succ; window.YDJSInterface.tryRunDataReport(); return; } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { //ios localCall需要的回调方法的key 和名字 let cbSuccAbj = { arg0: "pushSucc" }; let cbFailAbj = { arg1: "pushFail" }; let params = formatIosBridgeArgs(args.data, cbSuccAbj, cbFailAbj); //如果不需要回调 方法调用如下:formatIosBridgeArgs(args) 这时的args里也不存在succ 和 fail // let params = formatIosBridgeArgs(args) iosBridgeCall("push_pedometer", params); } APP.pushSucc = args.data.succ; APP.pushFail = args.data.fail; let url = "/local_call?local_action=push_pedometer&arg0=pushSucc&arg1=pushFail"; window.tool.iframeLocalCall(url); } }, //跳转到微信公众号 gotoBindWeChat() { if (window.tool.isAndroidWeb()) { window.YDJSInterface.gotoWeChatOpenAccount(); } if (window.tool.isIosWeb()) { if (checkIosBridgeVailable()) { iosBridgeCall("wechat_rank"); return; } window.location.href = "/local_call?local_action=wechat_rank"; } }, viewAdVideo(args: { data: { finish: any; tip: string; entry: any } }) { let version = window.tool.version; APP.ydViewAdVideoCb = args.data.finish; let tip = args.data.tip || "亲,请升级悦动圈app版本"; // 观看结束回调函数:window.onAdPlayFinish 参数值 1:观看完整 0: 未看完 if (window.tool.isYuedong()) { if (window.tool.isAndroidWeb()) { if (window.tool.versionCompare(version, "3.2.8.2.1") >= 0) { APP.openNativeInt("viewAdVideo", { user_id: parseInt(window.tool.getYdUserKey("user_id")) || 0, entry: args.data.entry, // 可在cms配置 http://cms.51yund.com/sport/index.php?r=ydVidoeExcitationConfig/admin }); return; } else { window.global.toast(tip); } } if (window.tool.isIosWeb()) { if (window.tool.versionCompare(version, "4.8.7") >= 0) { if (checkIosBridgeVailable()) { iosBridgeCall("play_reward_video", { entry: args.data.entry }); return; } let path = `/local_call?local_action=play_reward_video&entry=${args.data.entry}`; window.tool.iframeLocalCall(path); return; } else { window.global.toast(tip); } } } }, //显示分享按钮 ydShowShareBtn(isFristPage: any) { if (!window.tool.isYuedong()) return; if (isFristPage) { let queryStr = location.search; if (queryStr) { if (queryStr.indexOf("ios_show_share=true") == -1) { queryStr += "&ios_show_share=true"; } if (queryStr.indexOf("showTitle=true") == -1) { queryStr += "&showTitle=true"; } } else { queryStr = "?showTitle=true&ios_show_share=true"; } history.replaceState({}, "", queryStr); } if (window.tool.isAndroidWeb()) { if (window.YDJSInterface && "showShareBtn" in window.YDJSInterface) { window.YDJSInterface.showShareBtn(); } } else { if (checkIosBridgeVailable()) { return iosBridgeCall("hide_share_bnt", { arg0: 1 }); } let url = "/local_call?local_action=hide_share_bnt&arg0=1"; window.tool.iframeLocalCall(url); } }, //隐藏分享按钮 ydHideShareBtn() { if (window.tool.isAndroidWeb()) { if (window.YDJSInterface && "hideShareBtn" in window.YDJSInterface) { window.YDJSInterface.hideShareBtn(); } } else { if (checkIosBridgeVailable()) { return iosBridgeCall("hide_share_bnt", { arg0: 0 }); } let url = "/local_call?local_action=hide_share_bnt&arg0=0"; window.tool.iframeLocalCall(url); } }, //跳转到小视频播放列表 openShortVideoList(currentTopicId: any) { window.YDJSInterface.openShortVideoList(currentTopicId, 3); }, //跳转到短视频播放列表 openCircleVideoList(currentTopicId: any) { window.YDJSInterface.openCircleVideoList(currentTopicId, 3); }, //跳转到文章详情 jumpTopicArticleDetail(currentTopicId: any) { window.YDJSInterface.jumpTopicArticleDetail(currentTopicId, 0); }, //发短信 onSendSms(phone: any, msg: any) { if ("sendPhoneMessage" in window.YDJSInterface) { window.YDJSInterface.sendPhoneMessage(phone, msg); return; } }, //用X5浏览器打开新链接 loadURLByX5WebKit(url: string) { if (!url) { return; } if (window.YDJSInterface && "loadURLByX5WebKit" in window.YDJSInterface) { window.YDJSInterface.loadURLByX5WebKit(url); } else { window.location.href = url; } }, //打开新的webView jumpToYDWebView(url: string) { if (window.YDJSInterface && "jumpToYDWebView" in window.YDJSInterface) { window.YDJSInterface.jumpToYDWebView(url); return; } window.location.href = url; }, //在ios需要主动调web函数传递数据时 web需要注册客户端调的方法 即funName iosBridgeRegister(funName: any) { Bridge.registerhandler( funName, (data: any, responseCallback: (arg0: string) => void) => { let res = ""; responseCallback(res); //告诉客户端我们接收到了数据 } ); }, /** * 清除IOS的日历 * @param {String} keyword 模糊匹配关键词,跟APP.setAppCalendar里面的content参数对应 * @param {Number} start_ts 清除日历的开始时间 * @param {Number} end_ts 清除日历的结束时间 */ // clearIosCalendar() { // if ( // window.tool.isIosWeb() && // window.tool.versionCompare(window.tool.version, "5.0.8") >= 0 // ) { // let url = `/local_call?local_action=yd_calendar_delete_remind&keyword=${keyword}&start_ts=${start_ts}&end_ts=${end_ts}`; // window.tool.iframeLocalCall(url); // } // }, /** * 设置日历提醒 * @param {Array} data.remind_ts * @param {String} data.title * @param {String} data.content//url备注 */ setAppCalendar(data: { title: any; remind_ts: any[]; content: any }) { // syncCalendarReminderV2去掉了科学运动计划的文案 if ( window.tool.isAndroidWeb() && window.YDJSInterface && "syncCalendarReminderV2" in window.YDJSInterface ) { let planJsonStr = { title: data.title, }; let dayDetailJsonStr = data.remind_ts.map((item: number) => { let obj = { day_time: item - 19 * 60 * 60, // 减去19h,因为跟科学运动计划的接口耦合了 }; return obj; }); window.YDJSInterface.syncCalendarReminderV2( JSON.stringify(planJsonStr), JSON.stringify(dayDetailJsonStr) ); return; } if ( window.tool.isAndroidWeb() && window.YDJSInterface && "syncCalendarReminder" in window.YDJSInterface ) { let planJsonStr = { title: data.title, }; let dayDetailJsonStr = data.remind_ts.map((item: number) => { let obj = { day_time: item - 19 * 60 * 60, // 减去19h,因为跟科学运动计划的接口耦合了 }; return obj; }); window.YDJSInterface.syncCalendarReminder( JSON.stringify(planJsonStr), JSON.stringify(dayDetailJsonStr) ); return; } if ( window.tool.isIosWeb() && window.tool.versionCompare(window.tool.version, "5.0.8") >= 0 ) { let list = data.remind_ts.map((item: any) => { let obj = { title: data.title, content: data.content ? data.content : data.title, remind_ts: item, }; return obj; }); le