Harmony SDK接入

本章节介绍了HarmonyOS SDK的接入方法。

前言

本SDK基于HarmonyOS API 12开发,compatibleSdkVersion为5.0.0(12)。

准备工作

  1. 请参考HarmonyOS应用开发文档准备HarmonyOS应用开发环境。

  2. 请参考Native应用开发流程创建鸿蒙应用,在应用设置中查看AppKey和AppSecret。

第一步:安装SDK

在HarmonyOS应用根目录执行以下命令来安装SDK:

ohpm install @aliyun/feedback

ohpm工具及更多关于OpenHarmony安装第三方SDK的信息请参考OpenHarmony三方库中心仓说明

第二步:初始化SDK

初始化SDK的操作并非强制要求在应用启动时进行,可以在实际使用之前进行调用,代码如下:

说明

其中appKey,appSecret请配置为在准备工作中获取的AppKey和AppSecret。

import {FeedbackAPI,InitConfig} from '@aliyun/feedback';
let feedback_config: InitConfig = new InitConfig({
    appkey: 'appKey参数',
    appSecret: 'appSecret参数',
    backIconResource: $r('app.media.app_logo'),
    loadProgressColor: '#0DD0FF',
    isOpenLog: true,
    rightButtonFontSize: 16
  })
//getContext() 为当前组件所在Ability的Context
FeedbackAPI.init(getContext(), feedback_config) 

详细信息查看Harmony SDK API

第三步:获取反馈未读消息数(可选)

SDK提供了获取未读消息数量的功能,若有展示需求,可进行获取,代码如下:

FeedbackAPI.getFeedbackUnreadCount((count : number) => {
     promptAction.showToast({ message: "未读消息数为:" + count })
}, () => {
     promptAction.showToast({ message: "获取未读消息数失败" })
})

详细信息查看Harmony SDK API

第四步:添加相册、拍照、麦克风权限申请回调(可选)

用户首次进行需要授权操作时,SDK会直接向用户申请相关权限。

开发者可以通过如下方式注册回调监听,在SDK申请权限之前,说明权限用途,代码如下:

let albumCallback: IPermissionRequestInterrupt = {
      interrupt: (context: Context, action: string, permissions: Permissions[],
        callback: InterruptCallback): void => {
          showDialog("即将进行敏感权限授权","相册", "选择问题照片进行反馈", callback)
      }
    }
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_ALBUM, albumCallback)
let cameraCallback: IPermissionRequestInterrupt = {
      interrupt: (context: Context, action: string, permissions: Permissions[],
        callback: InterruptCallback): void => {
           showDialog("即将进行敏感权限授权","相机", "拍照问题进行反馈", callback)
        }
    }
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_CAMERA, cameraCallback)
let microPhoneCallback: IPermissionRequestInterrupt = {
      interrupt: (context: Context, action: string, permissions: Permissions[],
        callback: InterruptCallback): void => {
           showDialog("即将进行敏感权限授权","录音", "录制语音描述进行反馈", callback)
       }
    }
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_MICROPHONE, microPhoneCallback)

// 这里是示意代码,弹出提示窗,说明权限用途
private showDialog(title: string, permission: string, message: string, callback: InterruptCallback) {
    AlertDialog.show({
      title: title,
      message: `${permission}: ${message}`,
      autoCancel: true,
      alignment: DialogAlignment.Center,
      gridCount: 4,
      primaryButton: {
        value: '取消',
        action: () => {
          callback.stopRequest()
        }
      },
      secondaryButton: {
        enabled: true,
        defaultFocus: true,
        style: DialogButtonStyle.HIGHLIGHT,
        value: '确定',
        action: () => {
          callback.goOnRequest()
        }
      },
      cancel: () => {
        callback.stopRequest()
      }
    }
    )
  }

若用户首次拒绝权限申请,SDK提供了二次权限申请的回调。

开发者可以在此处进行文本提醒,或引导用户跳转至系统设置页面,代码如下:

let rationaleCallback: IPermissionRationale = {
  onPermissionDenied: (permissions: Permissions[]): Promise<void> => {
    //跳转到设置页面
    return new Promise<void>((resolve, reject) => {
      let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
      let context: Context = getContext() as common.UIAbilityContext;
      atManager.requestPermissionOnSetting(context, permissions).then((result) => {
        resolve()
      }).catch((error: BusinessError) => {
        reject(error)
      })
    })
  }
}
FeedbackAPI.setPermissionRationale(rationaleCallback)

详细信息查看Harmony SDK API

第五步:设置自定义扩展参数、昵称、联系方式(可选)

SDK提供动态配置用户昵称、用户联系方式及扩展参数能力,开发者可根据具体需求进行自定义配置,代码如下:

FeedbackAPI.setUserNick('昵称')
FeedbackAPI.setDefaultUserContactInfo('联系方式')
let ext = `{"key":"value"}`
FeedbackAPI.setAppExtInfo(ext)
重要
  • 拓展参数需要是满足json格式的字符串

详细信息查看Harmony SDK API

第六步:打开用户反馈页面

开发者配置无误后,即可打开用户反馈页面。

打开用户反馈页面属于耗时操作,因此建议开发者增加loading组件以提升用户体验。

@State progressStatus = false

//LoadingProgress 具体实现...  

this.progressStatus = true
FeedbackAPI.openFeedback(() => {
  //打开成功
  this.progressStatus = false
}, (info, code) => {
  //打开失败
  this.progressStatus = false
})

详细信息查看Harmony SDK API