隱私協議對話框 - Shared Package動態共享包使用
一、準備工作
1、共享包har和hsp文件(自行開發)
qhj_privacy_library.har
qhj_privacy_library-default-signed.hsp
2、安裝共享包har文件(使用方安裝)
D:\xxxDemo\entry> ohpm install ..\qhj_privacy_library.har
二、動態共享包使用介紹
1、共享包導出一個首選項數據庫類和一個Dialog組件
export { PreferencesUtil } from "./utils/PreferencesUtil"
export { CustomDialogPrivacy } from './dialog/CustomDialogPrivacy'
2、PreferencessUtil提供了創建首選項數據庫,保存數據,修改數據
export class PreferencesUtil {
createPrivacyPreferences(context)
saveDefaultPrivacy(isAgree: boolean)
saveChangePrivacy(isAgree: boolean)
async getChangePrivacy()
async deleteChangePrivacy()
}
3、CustomDialogPrivacy對話框提供更改標題,文本,本地html或遠程html文件配置
// 隱私協議標題
private title?: string = '協議和隱私政策提示'
// 前輟隱私協議信息
private prefixMessage?: string = '感謝您選擇xxx元服務!我們非常重視您....'
// 后輟隱私協議信息
private suffixMessage?: string = '的全部內容。'
// 隱私協議信息,點擊可以跳轉
private privacyMessage?: string = '《協議與隱私政策》'
// 本地html文件或http和https返回html文件
private localHtml?: boolean = true
// 隱私協議URL 支持本地html或http和https返回html
private urlPage?: string = ""
三、使用方如何調用
1、在EntryAbility.ts的onCreate初始化首選項數據
import { CustomDialogPrivacy,PreferencesUtil } from 'qhj_privacy_library'
let preferencesUtil = new PreferencesUtil();
onCreate(want, launchParam) {
// 創建首選項數據庫
preferencesUtil.createPrivacyPreferences(this.context);
// 設置隱私協議默認不同意
preferencesUtil.saveDefaultPrivacy(false);
}
2、在Index.ets頁面調用共享包自定義Dialog
import { CustomDialogPrivacy,PreferencesUtil } from 'qhj_privacy_library'
let preferencesUtil = new PreferencesUtil();
// 開始顯示隱私協議對話框
/**
* 如果localHtml參數為true,urlPage參數為空,顯示默認隱私協議
* 如果localHtml參數為true,urlPage參數不為空,顯示urlPage參數本地html文件
* 如果localHtml參數為false,urlPage參數為空,顯示默認隱私協議
* 如果localHtml參數為false,urlPage參數不為空,顯示urlPage參數http或https返回html文件
*/
privacyDialogController: CustomDialogController = new CustomDialogController({
builder: CustomDialogPrivacy({
localHtml: true,
urlPage: 'privacy.html'
// urlPage: 'https://id1.cloud.huawei.com/AMW/portal/agreements/userAgreement/zh-cn_userAgreement.html'
}),
autoCancel: false,
alignment: DialogAlignment.Center,
customStyle: true
})
onPageShow() {
console.info('xx onPageShow 顯示隱私協議')
preferencesUtil.getChangePrivacy().then((value) => {
console.info(`xx onPageShow 獲取隱私協議狀態:${value}`)
if (!value) {
this.privacyDialogController.open()
}
})
}
onPageHide() {
console.info(`xx Index -> onPageHide Close Start`)
this.privacyDialogController.close()
console.info(`xx Index -> onPageHide Close End`)
}
aboutToDisappear() {
console.info(`xx Index -> aboutToDisappear`)
delete this.privacyDialogController
this.privacyDialogController = null
}
// 結束顯示隱私協議對話框
四、補充內容
1、跨包頁面路由跳轉
若想在library模塊中的Dialog點擊文本跳轉到隱私協議頁面(路徑為:library/src/main/ets/pages/PrivacyPage.ets),那么可以在Dialog的代碼(library模塊下的CustomDialogPrivacy.ets,路徑為:qhj_privacy_library/src/main/ets/dialog/CustomDialogPrivacy.ets)里這樣使用:
.onClick(() => {
this.controller.close()
router.pushUrl({
url: '@bundle:com.xxx.study/qhj_privacy_library/ets/pages/PrivacyPage',
params: {
localHtml: this.localHtml,
pageUrl: this.urlPage
}
}).then(() => {
console.info("xx push page success");
}).catch(err => {
console.error(`xx pushUrl failed, code is ${err.code}, message is ${err.message}`);
})
})
其中router.pushUrl方法的入參中url的內容為:
'@bundle:com.xxx.study/qhj_privacy_library/ets/pages/PrivacyPage'
url內容的模板為:
'@bundle:包名(bundleName)/模塊名(moduleName)/路徑/頁面所在的文件名(不加.ets后綴)'
2、應用內HSP開發指導
應用內HSP開發指導-HSP-共享包-應用程序包基礎知識-開發基礎知識-入門-HarmonyOS應用開發
3、應用間HSP的調試方式
開發者本地調試應用間HSP相關的功能時,可以通過相關指令本地完成應用間HSP的分發,主要步驟如下:
- 獲取到應用間HSP的安裝包。
- 通過指令先安裝應用間HSP的安裝包。
hdc install qhj_privacy_library-default-signed.hsp
通過指令后安裝開發者自身的應用hap。
hdc install library_privacy-demo.hap
啟動開發者自身的應用,調試相關功能。
注意:步驟2和步驟3不可以顛倒,否則會由于缺少必要的應用間HSP
導致開發者的應用安裝失敗。
4、打包HSP和HAP注意事項
打包HSP和HAP用手工簽名,也就是不能用自動簽名,如果生成HSP包時用自動簽名,生成HAP包時也是用自動簽名,安裝時,就會提示簽名不一致。生成簽名證書請看官方文檔:
為應用/服務進行簽名-調試HarmonyOS應用/服務-應用/服務調試-DevEco Studio使用指南-工具-HarmonyOS應用開發
五、總結
通過開發隱私協議對話框動態共享包,學習到了跨包頁面路由跳轉,HSP動態共享包開發、引用和調試,同時也為以后App上架做好準備工作,這樣以后開發的項目都可以引用這個隱私協議共享包,大大縮小開發時間和成本。