Skip to content

lihongmeng/Aviation

Repository files navigation

项目介绍

项目架构

此APP是一个金字塔型,共分为4层,只允许上层依赖下层,严禁同层模块之间互相依赖。

  • APP层:应用APP层,它可以依赖任何其它模块,但是它应该足够的简单,不应该有任何的业务逻辑。

    • GVideoApplication:App初始化入口
    • GVideoEnvironment:服务器环境配置
    • NetworkInitialization:接口请求初始化入口
    • 其他
  • features: 业务层,可以依赖kernels层和libraries层

    • account:账号、个人中心、设置等
    • feed:feed流与频道页
    • home:主页面
    • pptv:pptv
    • record:ugc拍摄
    • search:搜索
    • share:分享工具模块
    • test:侧边栏调试入口
    • video:播放详情页、活动直播详情页
    • webview:内置WebView
    • live:互动直播模块
  • kernels: 一些基础组件,包含企业级中台服务,以及多个业务层需要使用的功能,可以依赖libraries层。

    • base: 存放整个APP所有的基类,绝对不允许添加任何业务代码
    • event: 消息总线模块。以GVideoEventBus作为入口。
    • liteav: 播放器相关模块。以KSVideoView作为入口。
    • media: 自动播放相关模块。
    • network: 网络请求相关模块。
    • runtime:上下文模块。
    • stat:统计模块。以GVideoStatManager作为入口。
    • push:消息推送模块
  • res: 资源相关模块。放置一些共用资源。

  • libraries: 通用库层,沉淀一些没有业务的代码,这部分定位是未来可以开源的内容

    • crop: 图片裁剪工具模块。
    • ioc: 模块依赖库,用来各模块解耦。
    • utils: 工具类。
    • widget: 里面包含了气泡,dialog,沉浸式,输入框,toast,popup等ui组件
    • videocache: 视频预加载、视频离线缓存库
  • tuikit: 带UI的腾讯IM聊天库


配置信息

  • 配置入口 app/build.gradle
  • App初始化入口 GVideoApplication
  • 三方库配置入口 versions.gradle
  • 编辑脚本 ./gradlew assembleDebug assembleRelease

URL路由协议

支持从H5页面直接跳转到App某页面,比如分享H5页可以唤起App详情页 外链跳转分发逻辑详见: H5EntryPlugin

已支持外链跳转:

PGC 页面:  jinshipin://pgc/<authorId>       // 如: jinshipin://pgc/123,authorId:用户 ID
UGC 页面:  jinshipin://ugc/<authorId>       // 如: jinshipin://ugc/123,authorId:用户 ID

首页垂类:  jinshipin://home/<mediaTabId> // 如: jinshipin://home/-1,mediaTabId:垂类 ID
直播垂类:  jinshipin://live/<mediaTabId> // 如: jinshipin://live/2,mediaTabId:垂类 ID

//已废弃
视频垂类:  jinshipin://video/<mediaTabId> // 如: jinshipin://video/123,mediaTabId:垂类 ID
//已废弃
FM 垂类:  jinshipin://fm/<mediaTabId>    // 如: jinshipin://fm/123,mediaTabId:垂类 ID

进入通知列表详情:  jinshipin://notification?msgType=2&title=互动消息
                 msgType 消息类型,用于api/notification/list接口请求数据
                 title   消息界面标题

内容详情页:  jinshipin://detail/{mediaId}?mediaType=2
  mediaId 为资源id, 必选
  mediaType 资源大类 ,必选
  1 长视频 
  2 短视频 
  3 长音频 
  4 短音频
  5 活动直播横屏 
  6 活动直播竖屏
  7 互动直播横屏 
  8 互动直播竖屏
  9、10 图文动态详情
  11、12 新闻详情
  20 社区详情
  21 话题详情
  22 放心爱详情
  23 自建看电视详情
  24 看电视详情 

web页:  jinshipin://web?gv_url=URLEcoded(realUrl)
  在app内打开某web落地页,参数为gv_url

JS交互协议

使用内嵌WebView时,开放部分js交互API由H5控制页面形式,比如可以在意见反馈页面隐藏原生标题栏 JS协议处理逻辑详见:WebJavaScriptHandler

已支持的JS交互协议:

// 关闭当前页面(异步调用)
jinshipin://h5-native/commands/closePage
// 隐藏导航栏(异步调用)
jinshipin://h5-native/commands/hideNavigationBar
// 设置标题(异步调用)
jinshipin://h5-native/commands/setNavTitle?title=标题
// 打开分享弹窗
jinshipin://h5-native/commands/share?title=标题&url=分享链接&image=缩略图&description=描述
// 当前 App 版本(同步调用)
jinshipin://h5-native/datas/appVersion
// 当前登录用户token
jinshipin://h5-native/datas/userToken

H5调用方式参考:

// 异步调用,无返回值
function callNativeAction(url) {
  // 调用 iOS 使用
  window.webkit.messageHandlers.callNative.postMessage(url);
  // 调用 android 使用
  window.GVJsBridge.callNativeMethod(url); // AndroidJsBridge 安卓注册到 H5,直接使用便可
}
// 同步调用,同步获取放回值
function getNativeData(url) {
  // 调用 iOS & android
  var version = prompt(url)
}

埋点

对于某些客户端行为进行记录,上传到数据统计后台,统计后台结合业务数据进行处理,展示统计数据。

基本原理 入口参见 GVideoStatManager

  • 埋点服务器 接收客户端上传批量埋点信息,支持gzip压缩;
  • 缓存埋点形式:使用缓存埋点数据库;
  • 上传方式:批量埋点打包上传,server记录,后续按照协议拆解。 上传成功后清除本地数据库。
  • 埋点上传打包形式:数组,形式类似{通用信息+具体信息1,通用信息+具体信息2,...};
  • 埋点上传时机:前后台切换时上传所有本地缓存埋点,缓存埋点达到100条时;

埋点通用信息 详情参见 StatGroupEntity

String uid;/** 今视频号 */
String cid;/** 设备终端deviceId */
Date timestamp;/** 时间戳ms */
String networkType;/** 网络类型,例如WIFI,移动4G,电信5G */
String appName;/** 应用包名 */
String appVersion;/** 应用的版本 */
String channel;/** 渠道号 */
String manufacturer;/** 设备制造商,例如Apple */
String model;/** 设备型号,例如iphone6 */
String os;/** 操作系统,例如iOS */
String osVersion;/** 操作系统版本,例如8.1.1 */

具体埋点信息 详情参见 StatEntity

String pid; /** 页面id */
String sessionId; /** 生命周期id */
Date timestamp;/** 时间戳ms */
String ev; /** 事件id */
String ds;/** 事件参数 */
@StatType String type; /** 埋点类型 */

StatType 详情参见 StatConstants

  • "a" App生命周期变化
  • "c" 主动点击
  • "e" 事件曝光

Pid 详情参照 StatPid


RN

项目初始设计时, 会有RN模块。但目前RN未使用。若无需要, 可移除


第三方库介绍 参见 versions.gradle


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages