在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

鴻蒙開發Ability Kit程序框架服務:向用戶申請授權

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-07-01 09:18 ? 次閱讀

向用戶申請授權

當應用需要訪問用戶的隱私信息或使用系統能力時,例如獲取位置信息、訪問日歷、使用相機拍攝照片或錄制視頻等,應該向用戶請求授權,這部分權限是user_grant權限。

當應用申請user_grant權限時,需要完成以下步驟:

  1. 在配置文件中,聲明應用需要請求的權限。
  2. 將應用中需要申請權限的目標對象與對應目標權限進行關聯,讓用戶明確地知道,哪些操作需要用戶向應用授予指定的權限。
  3. 運行應用時,在用戶觸發訪問操作目標對象時應該調用接口,精準觸發動態授權彈框。該接口的內部會檢查當前用戶是否已經授權應用所需的權限,如果當前用戶尚未授予應用所需的權限,該接口會拉起動態授權彈框,向用戶請求授權。
  4. 檢查用戶的授權結果,確認用戶已授權才可以進行下一步操作。
  5. 開發前請熟悉鴻蒙開發指導文檔 :[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

本章節會介紹如何完成步驟3和4。

約束與限制

  • 每次執行需要目標權限的操作時,應用都必須檢查自己是否已經具有該權限。
    如需檢查用戶是否已向您的應用授予特定權限,可以使用[checkAccessToken()]函數,此方法會返回[PERMISSION_GRANTED]或[PERMISSION_DENIED]。具體示例可參考下文。
  • 每次訪問受目標權限保護的接口之前,都需要使用[requestPermissionsFromUser()]接口請求相應的權限。
    用戶可能在動態授予權限后通過系統設置來取消應用的權限,因此不能將之前授予的授權狀態持久化。
  • user_grant權限授權要基于用戶可知可控的原則,需要應用在運行時主動調用系統動態申請權限的接口,系統彈框由用戶授權,用戶結合應用運行場景的上下文,識別出應用申請相應敏感權限的合理性,從而做出正確的選擇。
  • 系統不鼓勵頻繁彈窗打擾用戶,如果用戶拒絕授權,將無法再次拉起彈窗,需要應用引導用戶在系統應用“設置”的界面中手動授予權限。

開發步驟

以申請使用麥克風權限為例進行說明。

效果展示:

zh-cn_image_0000001701708034

  1. 申請ohos.permission.MICROPHONE權限。
  2. 校驗當前是否已經授權。
    在進行權限申請之前,需要先檢查當前應用程序是否已經被授予權限。可以通過調用[checkAccessToken()]方法來校驗當前是否已經授權。如果已經授權,則可以直接訪問目標操作,否則需要進行下一步操作,即向用戶申請授權。
    import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit';
    import { BusinessError } from '@kit.BasicServicesKit';
    
    const permissions: Array< Permissions > = ['ohos.permission.MICROPHONE'];
    
    async function checkPermissionGrant(permission: Permissions): Promise< abilityAccessCtrl.GrantStatus > {
      let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
      let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;
    
      // 獲取應用程序的accessTokenID
      let tokenId: number = 0;
      try {
        let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
        let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
        tokenId = appInfo.accessTokenId;
      } catch (error) {
        const err: BusinessError = error as BusinessError;
        console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
      }
    
      // 校驗應用是否被授予權限
      try {
        grantStatus = await atManager.checkAccessToken(tokenId, permission);
      } catch (error) {
        const err: BusinessError = error as BusinessError;
        console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);
      }
    
      return grantStatus;
    }
    
    async function checkPermissions(): Promise< void > {
      let grantStatus: abilityAccessCtrl.GrantStatus = await checkPermissionGrant(permissions[0]);
    
      if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
        // 已經授權,可以繼續訪問目標操作
      } else {
        // 申請麥克風權限
      }
    }
    
  3. 動態向用戶申請授權。
    動態向用戶申請權限是指在應用程序運行時向用戶請求授權的過程。可以通過調用[requestPermissionsFromUser()]方法來實現。該方法接收一個權限列表參數,例如位置、日歷、相機、麥克風等。用戶可以選擇授予權限或者拒絕授權。
    可以在UIAbility的onWindowStageCreate()回調中調用[requestPermissionsFromUser()]方法來動態申請權限,也可以根據業務需要在UI中向用戶申請授權。
    • 在UIAbility中向用戶申請授權。

      import { abilityAccessCtrl, common, Permissions, UIAbility } from '@kit.AbilityKit';
      import { window } from '@kit.ArkUI';
      import { BusinessError } from '@kit.BasicServicesKit';
      
      const permissions: Array< Permissions > = ['ohos.permission.MICROPHONE'];
      function reqPermissionsFromUser(permissions: Array< Permissions >, context: common.UIAbilityContext): void {
        let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
        // requestPermissionsFromUser會判斷權限的授權狀態來決定是否喚起彈窗
        atManager.requestPermissionsFromUser(context, permissions).then((data) = > {
          let grantStatus: Array< number > = data.authResults;
          let length: number = grantStatus.length;
          for (let i = 0; i < length; i++) {
            if (grantStatus[i] === 0) {
              // 用戶授權,可以繼續訪問目標操作
            } else {
              // 用戶拒絕授權,提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統設置中打開相應的權限
              return;
            }
          }
          // 授權成功
        }).catch((err: BusinessError) = > {
          console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
        })
      }
      export default class EntryAbility extends UIAbility {
        onWindowStageCreate(windowStage: window.WindowStage): void {
          // ...
          windowStage.loadContent('pages/Index', (err, data) = > {
            reqPermissionsFromUser(permissions, this.context);
          // ...
          });
        }
      
        // ...
      }
      
    • 在UI中向用戶申請授權。

      import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
      import { BusinessError } from '@kit.BasicServicesKit';
      
      const permissions: Array< Permissions > = ['ohos.permission.MICROPHONE'];
      function reqPermissionsFromUser(permissions: Array< Permissions >, context: common.UIAbilityContext): void {
        let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
        // requestPermissionsFromUser會判斷權限的授權狀態來決定是否喚起彈窗
        atManager.requestPermissionsFromUser(context, permissions).then((data) = > {
          let grantStatus: Array< number > = data.authResults;
          let length: number = grantStatus.length;
          for (let i = 0; i < length; i++) {
            if (grantStatus[i] === 0) {
              // 用戶授權,可以繼續訪問目標操作
            } else {
              // 用戶拒絕授權,提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統設置中打開相應的權限
              return;
            }
          }
          // 授權成功
        }).catch((err: BusinessError) = > {
          console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
        })
      }
      
      @Entry
      @Component
      struct Index {
        aboutToAppear() {
          const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
          reqPermissionsFromUser(permissions, context);
        }
      
        build() {
          // ...
        }
      }
      

      HarmonyOSOpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

      QQ瀏覽器截圖20240320150855.png

  4. 處理授權結果。
    調用[requestPermissionsFromUser()]方法后,應用程序將等待用戶授權的結果。如果用戶授權,則可以繼續訪問目標操作。如果用戶拒絕授權,則需要提示用戶必須授權才能訪問當前頁面的功能,并引導用戶到系統應用“設置”中打開相應的權限。
    路徑:設置 > 隱私 > 權限管理 > 應用 > 目標應用

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    17747
  • 鴻蒙
    +關注

    關注

    57

    文章

    2470

    瀏覽量

    43666
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    鴻蒙原生應用元服務-訪問控制(權限)開發Stage模型向用戶申請授權

    之前,需要先檢查當前應用程序是否已經被授予了權限??梢酝ㄟ^調用checkAccessToken()方法來校驗當前是否已經授權。如果已經授權,則可以直接訪問目標操作,否則需要進行下一步操作,即
    發表于 04-15 16:44

    鴻蒙原生應用元服務開發-位置服務申請權限

    申請位置權限開發指導 場景概述 應用在使用位置服務系統能力前,需要檢查是否已經獲取用戶授權訪問設備位置信息。如未獲得
    發表于 06-18 15:27

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)事件推薦接入方案

    一、方案概述 當開發者有事件想要通知到用戶時,可通過應用/元服務的云側服務器向智慧分發平臺推送事件內容(意圖共享)。系統通過智慧決策判斷事件發生的條件,在滿足條件時,
    發表于 11-14 15:26

    HarmonyOS NEXT應用元服務開發Intents Kit(意圖框架服務)綜述

    一、綜述 Intents Kit(意圖框架服務)是HarmonyOS級的意圖標準體系 ,意圖連接了應用/元服務內的業務功能。 意圖框架能幫
    發表于 11-28 10:43

    鴻蒙應用元服務開發-Account Kit概述

    Account Kit(華為賬號服務)提供簡單、快速、安全的登錄功能,讓用戶快捷地使用華為賬號登錄元服務用戶
    發表于 03-31 12:08

    鴻蒙應用元服務開發-Account Kit獲取華為賬號用戶信息概述

    一、概述 當元服務需要完善用戶個人資料(頭像、手機號、收貨地址、發票抬頭)時,可通過Account Kit提供的相關能力,引導用戶填寫、管理相關信息并完成
    發表于 04-02 11:10

    鴻蒙應用元服務開發-Account Kit獲取手機號

    。 二、快速驗證 (一)場景介紹 當元服務對獲取的手機號時效性要求不高時,可調用Scenario Fusion Kit的快速驗證手機號Button,向用戶發起手機號授權
    發表于 04-08 16:14

    鴻蒙應用元服務開發-Account Kit配置登錄權限

    一、場景介紹 華為賬號登錄是基于OAuth 2.0協議標準和OpenID Connect協議標準構建的OAuth2.0 授權登錄系統,元服務可以方便地獲取華為賬號用戶的身份標識,快速建立元服務
    發表于 04-15 16:03

    鴻蒙應用模型:【Ability Kit】簡介

    Ability Kit程序框架服務)提供了應用程序開發
    的頭像 發表于 05-29 14:41 ?955次閱讀
    <b class='flag-5'>鴻蒙</b>應用模型:【<b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>】簡介

    鴻蒙Ability Kit程序框架服務)【Ability內頁面間的跳轉】

    基于Stage模型下的Ability開發,實現Ability內頁面間的跳轉和數據傳遞。
    的頭像 發表于 06-03 20:43 ?480次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Ability</b>內頁面間的跳轉】

    鴻蒙Ability Kit程序框架服務)【Ability與ServiceExtensionAbility通信】

    本示例展示通過[IDL的方式]和?[@ohos.rpc]?等接口實現了Ability與ServiceExtensionAbility之間的通信。
    的頭像 發表于 06-05 09:28 ?704次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b>(<b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>)【<b class='flag-5'>Ability</b>與ServiceExtensionAbility通信】

    鴻蒙Ability Kit程序框架服務)【應用啟動框架AppStartup】

    `AppStartup`提供了一種更加簡單高效的初始化組件的方式,支持異步初始化組件加速應用的啟動時間。使用啟動框架應用開發者只需要分別為待初始化的組件實現`AppStartup`提供
    的頭像 發表于 06-10 18:38 ?1009次閱讀

    鴻蒙開發Ability Kit程序框架服務:聲明權限

    應用在申請權限時,需要在項目的配置文件中,逐個聲明需要的權限,否則應用將無法獲取授權。
    的頭像 發表于 07-01 09:22 ?534次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>:聲明權限

    鴻蒙開發Ability Kit程序框架服務向用戶申請單次授權

    基于授權最小化的原則,防止應用獲取和濫用用戶數據,針對部分應用敏感權限,在彈窗向用戶申請授權時,新增“允許本次使用”的
    的頭像 發表于 07-01 14:34 ?619次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b><b class='flag-5'>服務</b>:<b class='flag-5'>向用戶</b><b class='flag-5'>申請</b>單次<b class='flag-5'>授權</b>

    鴻蒙開發Ability Kit程序訪問控制:向用戶申請單次授權

    受限開放的權限通常是不允許三方應用申請的。當應用在申請權限來訪問必要的資源時,發現部分權限的等級比應用APL等級高,開發者可以選擇通過ACL方式來解決等級不匹配的問題,從而使用受限權限。
    的頭像 發表于 07-02 17:48 ?728次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發</b><b class='flag-5'>Ability</b> <b class='flag-5'>Kit</b><b class='flag-5'>程序</b>訪問控制:<b class='flag-5'>向用戶</b><b class='flag-5'>申請</b>單次<b class='flag-5'>授權</b>
    主站蜘蛛池模板: 午夜影视啪啪免费体验区深夜 | 黄色网页在线观看 | 欧洲mv日韩mv国产mv | 亚洲高清不卡视频 | 人人射人人澡 | 亚洲手机看片 | 制服丝袜中文字幕第一页 | 色天天综合色天天碰 | 大尺度在线 | 午夜视频黄 | 欧美亚洲在线 | 亚洲精品www | 开心色99×xxxx | 亚洲成a人一区二区三区 | 午夜精| 成人精品一级毛片 | 国模在线视频 | 五月天久久婷婷 | 天堂资源在线中文 | 99干99| 日本黄段视频 | 亚洲欧美强伦一区二区另类 | 精品精品国产自在久久高清 | 夜夜爽66| 久久国产精品无码网站 | 欧美日韩一区不卡 | 色色色色色色色色色色色色 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片免费看 | 黄色成人在线网站 | 日本黄页网址 | 最近最新中文字幕在线第一页 | 亚洲精品卡1卡二卡3卡四卡 | ak福利午夜在线观看 | 午夜福免费福利在线观看 | 精品福利视频网站 | 日韩亚色| 中文三级视频 | 免费aa | 狠狠色 综合色区 | 91天天操| 免费网站日本 |