

























为支持开发者单独获取特定场景的页面和功能,本模板将功能完全自闭环的部分能力抽离出独立的行业组件模块,不依赖公共基础能力包,开发者可以单独集成,开箱即用,降低使用难度。
├─BookRead/entry/src/main/ets
│ ├─entryability
│ │ └─EntryAbility.ets // 应用主入口能力
│ ├─entrybackupability
│ │ └─EntryBackupAbility.ets // 应用备份恢复能力配置
│ └─pages
│ ├─BookHomePage.ets // 应用主页框架
│ └─Index.ets // 应用入口默认首页
│
├─BookRead/commons/common/src/main/ets
│ ├─api
│ │ └─BookApi.ets // 图书API调用
│ ├─comp
│ │ ├─AggregatedPaymentPicker.ets // 集成支付选择器组件
│ │ ├─GlobalContext.ets // 全局上下文管理类
│ │ ├─TCInvoke.ets // 终端云服务调用封装
│ │ ├─TCLogger.ets // 终端云日志记录工具
│ │ ├─TCRouter.ets // 终端云路由导航管理
│ │ └─Toast.ets // 提示消息显示
│ ├─constant
│ │ └─Constants.ets // 常量定义文件
│ ├─model
│ │ ├─Book.ets // 图书数据模型
│ │ ├─BookSortInfo.ets // 图书排序信息模型
│ │ ├─BorrowInfo.ets // 借阅信息模型
│ │ ├─FeedbackRecordModel.ets // 反馈记录模型
│ │ ├─Member.ets // 会员信息模型
│ │ ├─PaymentModels.ets // 支付相关信息模型
│ │ ├─PreferenceInfo.ets // 用户偏好设置模型
│ │ ├─ReadSet.ets // 阅读模型
│ │ └─UserInfoModel.ets // 用户信息模型
│ ├─ui
│ │ ├─BookCard.ets // 图书卡片组件
│ │ ├─CommonUI.ets // 基础UI组件
│ │ └─TSearch.ets // 搜索功能相关组件
│ ├─utils
│ │ ├─DialogUtil.ets // 全局弹窗工具类
│ │ ├─EpubUtils.ets // Epub格式相关工具方法
│ │ ├─FileUtils.ets // 文件操作工具类
│ │ ├─MathUtil.ets // 数学计算工具类
│ │ ├─TimeUtils.ets // 时间处理工具类
│ │ ├─UserInfoUtil.ets // 用户信息处理工具类
│ │ └─WindowUtils.ets // 窗口或界面尺寸相关工具
│ └─viewmodel
│ ├─MemberCenterVM.ets // 会员中心逻辑模型
│ ├─RechargeRecordVM.ets // 充值记录逻辑模型
│ └─RechargeVM.ets // 充值功能业务逻辑模型
│
├─BookRead/feature/book_home/src/main/ets
│ ├─comps
│ │ ├─BookListCard.ets // 图书列表卡片式展示组件
│ │ ├─BookSwiperCard.ets // 图书轮播图展示卡片
│ │ ├─BookViewCard.ets // 图书详情视图卡片
│ │ ├─BookWaterFlowCard.ets // 图书瀑布流布局组件
│ │ └─HotRankCard.ets // 热门排行榜卡片
│ ├─viewModels
│ │ └─SearchViewModels.ets // 搜索功能逻辑模型
│ └─views
│ ├─BookListPage.ets // 图书列表页面
│ ├─BookViewListPage.ets // 带分类的图书列表视图页
│ └─SearchPage.ets // 全站搜索功能主页面
│
├─BookRead/feature/book_person/src/main/ets
│ ├─comp
│ │ ├─AccountCard.ets // 用户账户余额信息卡片
│ │ ├─ActivityCard.ets // 活动信息展示卡片
│ │ ├─CenterToolCard.ets // 个人中心工具卡片集
│ │ ├─FileSelect.ets // 文件选择器组件
│ │ ├─MembershipCard.ets // 会员身份展示卡片
│ │ ├─MyBalanceCard.ets // 余额信息展示卡片
│ │ ├─MyInfoCard.ets // 个人基本信息展示卡片
│ │ ├─OptionView.ets // 选项卡片组件
│ │ ├─SelectAvatarCard.ets // 头像选择器组件
│ │ ├─ServiceCard.ets // 服务入口卡片
│ │ ├─SignComp.ets // 签到卡片
│ │ └─UsrMsgCard.ets // 用户信息卡片
│ └─views
│ ├─AboutPage.ets // 关于我们信息页
│ ├─AccountPage.ets // 账户管理主页面
│ ├─ActivityPage.ets // 活动信息列表页
│ ├─DataCollectionPage.ets // 用户数据采集页
│ ├─DataSharingPage.ets // 数据共享协议页
│ ├─FeedbackPage.ets // 意见反馈表单页
│ ├─FeedbackRecordPage.ets // 反馈记录列表页
│ ├─IssueAndFeedbackPage.ets // 问题反馈页面
│ ├─LibraryPage.ets // 我的书馆页面
│ ├─LoginPage.ets // 用户登录页
│ ├─MemberAgreementPage.ets // 会员协议展示页
│ ├─MemberCenterPage.ets // 会员中心主界面
│ ├─PersonPage.ets // 个人中心主页
│ ├─PreferencePage.ets // 偏好设置页面
│ ├─PrivacyPage.ets // 隐私设置界面
│ ├─PrivacyPolicyPage.ets // 隐私政策声明页
│ ├─ReadSettingPage.ets // 阅读设置页
│ ├─RechargePage.ets // 充值中心主界面
│ ├─RechargeRecordPage.ets // 充值记录查询页
│ ├─WelfareCenter.ets // 福利中心页面
│ └─SettingPage.ets // 系统设置综合页面
│
├─BookRead/feature/book_read_kit/src/main/ets
│ ├─components
│ │ ├─BookCoverCard.ets // 图书封面展示组件
│ │ ├─ExpandableText.ets // 书评展示组件
│ │ ├─ReaderPage.ets // 阅读器核心页面
│ │ ├─ReaderTopCard.ets // 阅读器顶部控制栏
│ │ └─ShareBookCard.ets // 图书分享功能组件
│ ├─model
│ │ └─ReviewModels.ets // 图书数据模型
│ ├─pages
│ │ ├─MyReviewPage.ets // 我的评价页面
│ │ ├─WonderfulReviewPage.ets // 精彩书评页面
│ │ ├─WriteCommentPage.ets // 写评论页面
│ │ └─WriteReviewPage.ets // 全部书评页面
│ ├─utils
│ │ └─ReviewdataUtil.ets // 书籍评论工具类
│ └─viewmodel
│ └─WriteReviewVM.ets // 书籍评论数据模型
│
├─BookRead/feature/book_shelf/src/main/ets
│ ├─comps
│ │ ├─DeleteBottomCard.ets // 书籍删除确认底部弹窗
│ │ └─ManageGroupBottomCard.ets // 管理分组底部卡片
│ └─views
│ ├─BookGroupContent.ets // 书籍分组页
│ └─BookShelfPage.ets // 我的书架主界面
│
├─BookRead/feature/book_sort/src/main/ets
│ └─pages
│ └─BookSortPage.ets // 图书分类导航页面
│
├─BookRead/components/aggregated_payment/src/main/ets
│ ├─components
│ │ └─AggregatedPaymentPicker.ets // 集成支付选择器组件
│ ├─model
│ │ └─PaymentModels.ets // 支付相关信息模型
│ └─views
│ ├─AggregatedPaymentVM.ets // 支付组件数据模型
│ ├─MockApi.ets // 支付mock数据
│ ├─OrderInfoUtil.ets // 支付mock参数工具
│ └─SignUtils.ets // 支付mock签名工具
│
├─BookRead/components/base_common/src/main/ets
│ └─components
│ ├─ActionSheet.ets // 阅读器底部工具栏
│ └─UserInfo.ets // 阅读器用户信息
│
├─BookRead/components/incentive_ad/src/main/ets
│ ├─components
│ │ └─IncentiveAdvertising.ets // 广告位广告类
│ └─viewmodel
│ └─RewardAdStatusHandler.ets // 事件订阅
│
├─BookRead/components/reader_tool_bar/src/main/ets
│ └─components
│ └─PushKit.ets // 推送组件
│
├─BookRead/components/reader_tool_bar/src/main/ets
│ └─components
│ ├─ReaderToolBar.ets // 阅读器底部工具栏
│ └─SelectState.ets // 文本选择状态组件
│
└─BookRead/components/swiper_card/src/main/ets
├─components
│ ├─BookSingleSwiper.ets // 单图书滑动展示组件
│ ├─example.ets // 组件使用示例
│ └─TUISwiper.ets // 通用滑动卡片组件
└─model
├─Book.ets // 图书数据模型定义
└─LazyDataVM.ets // 数据逻辑模型
hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onCreate’);
// 获取Push Token
try {
const pushToken = await pushService.getToken();
AppStorage.setOrCreate(‘PushToken’, pushToken)
hilog.info(0x0000, ‘testTag’, ‘Succeeded in getting push token’);
} catch (err) {
let e: BusinessError = err as BusinessError;
hilog.error(0x0000, ‘testTag’, ‘Failed to get push token: %{public}d %{public}s’, e.code, e.message);
}
if (want.action === ‘com.test.action’) {
AppStorage.setOrCreate(‘takeMessage’, 1)
const pushData: PushData = {
pushContent: want.parameters?.pushContent as string,
time: want.parameters?.time as string,
read: false
}
AppStorage.setOrCreate(‘pushData’, pushData)
}
// 上报Push Token到服务端
// axios.post(“http://localhost:8080/upload”, pushToken, {
// headers: {
// “Content-Type”: “application/json”
// }
// })
// .then((response:AxiosResponse) => {
// console.log(“服务器响应:”, response.data);
// })
// .catch((err:BusinessError) => {
// console.error(“请求失败:”, err);
// });
}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
if (want.action === ‘com.test.action’) {
AppStorage.setOrCreate(‘takeMessage’, 1)
AppStorage.setOrCreate(‘coldBoot’, 1)
const pushData: PushData = {
pushContent: want.parameters?.pushContent as string,
time: want.parameters?.time as string,
read: false
}
AppStorage.setOrCreate(‘pushData’, pushData)
}
}
public registerPPSReceiver(): void {
if (this.subscriber) {
this.unRegisterPPSReceiver();
}
// 订阅者信息
const subscribeInfo: commonEventManager.CommonEventSubscribeInfo = {
events: [‘com.huawei.hms.pps.action.PPS_REWARD_STATUS_CHANGED’],
// publisherBundleName被设置为”com.huawei.hms.adsservice”,这意味着只有来自该包名的事件才会被订阅者接受和处理。
// 如果没有明确声明publisherBundleName,那么订阅者可能会收到来自其它包名的伪造事件,从而导致安全性问题或误导。
publisherBundleName: ‘com.huawei.hms.adsservice’
};
// 创建订阅者回调
commonEventManager.createSubscriber(subscribeInfo, (err: BusinessError, commonEventSubscriber:
commonEventManager.CommonEventSubscriber) => {
if (err) {
hilog.error(0x0000, ‘testTag’, `Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);
return;
}
hilog.info(0x0000, ‘testTag’, ‘Succeeded in creating subscriber’);
this.subscriber = commonEventSubscriber;
// 订阅公共事件回调
if (!this.subscriber) {
hilog.warn(0x0000, ‘testTag’, ‘Need create subscriber’);
return;
}
commonEventManager.subscribe(this.subscriber, (err: BusinessError, commonEventSubscriber:
commonEventManager.CommonEventData) => {
if (err) {
hilog.error(0x0000, ‘testTag’, `Failed to subscribe. Code is ${err.code}, message is ${err.message}`);
} else {
hilog.info(0x0000, ‘testTag’, ‘Succeeded in subscribing data’);
const status: string = commonEventSubscriber?.parameters?.[KEY_REWARD_STATUS];
switch (status) {
case AdStatus.AD_OPEN:
hilog.info(0x0000, ‘testTag’, ‘Status is onAdOpen’);
break;
case AdStatus.AD_CLICKED:
hilog.info(0x0000, ‘testTag’, ‘Status is onAdClick’);
break;
case AdStatus.AD_CLOSED:
hilog.info(0x0000, ‘testTag’, ‘Status is onAdClose’);
this.unRegisterPPSReceiver();
break;
case AdStatus.AD_REWARDED:
const rewardData: Record<string, string | number> = commonEventSubscriber?.parameters?.[KEY_REWARD_DATA];
const rewardType: string = rewardData?.rewardType as string;
const rewardAmount: number = rewardData?.rewardAmount as number;
this.userInfoFromStorage.bookCoins += rewardAmount;
AppStorage.setOrCreate(‘bookCoins’, this.userInfoFromStorage.bookCoins);
this.bookFinish++
AppStorage.set(‘bookFinished’, this.bookFinish);
emitter.emit({ eventId:15 })
hilog.info(0x0000, ‘testTag’, `Status is onAdReward. Type is ${rewardType}, Amount is ${rewardAmount}`);
hilog.info(0x0000, ‘testTag’,
`Status is userInfoFromStorage. Type is ${this.userInfoFromStorage.bookCoins}`);
break;
case AdStatus.AD_VIDEO_START:
hilog.info(0x0000, ‘testTag’, ‘Status is onAdVideoStart’);
break;
case AdStatus.AD_COMPLETED:
hilog.info(0x0000, ‘testTag’, ‘Status is onAdCompleted’);
break;
default:
break;
}
}
});
});
}
将commons/lib_common/src/main/ets/httprequest/HttpRequestApi.ets文件中的mock接口替换为真实的服务器接口。
在commons/lib_common/src/main/ets/httprequest/HttpRequest.ets文件中将云侧开发者自定义的数据结构转换为端侧数据结构。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。