FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# 扩展 SDK

扩展SDK 是对核心SDK的补充,所以要使用扩展SDK,也必须依赖核心SDK。

为了保证 SDK 的安全稳定性,将需要权限的API尽可能放到扩展SDK,FinClip 将 SDK 拆分为核心 SDK 与扩展 SDK,后者是前者的补充,因此使用扩展 SDK 也必须依赖核心 SDK。

一些涉及到权限的api,我们将其拆分到各个扩展SDK,您可以根据实际情况集成相应的扩展SDK。

请注意

注意:使用扩展SDK需要保证与核心SDK版本号保持一致,避免出现未知问题

请注意

注意:从 1.3.3 开始,为了使 SDK 合规,各个扩展 SDK 都声明了对应的权限。如果证书没有相关权限,集成时会报错。

# 1 蓝牙扩展SDK

@finclip/bluetooth-sdk是蓝牙扩展SDK。

涉及到的权限:ohos.permission.ACCESS_BLUETOOTH

# 1.1 集成蓝牙扩展SDK

dependencies 添加 @finclip/bluetooth-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/bluetooth-sdk": "latest"
  }

# 1.2 注册蓝牙扩展SDK

import { FinAppletBluetooth } from '@finclip/bluetooth-sdk';
// BluetoothSDK初始化
FinAppletBluetooth.init()

# 1.3 蓝牙SDK相关api概览

api名称 api描述信息
蓝牙-通用 一系列的api
蓝牙-低功耗中心设备 一系列的api
蓝牙-信标 鸿蒙系统不支持

# 2 通讯录扩展SDK

@finclip/contact-sdk是通讯录扩展SDK。

涉及到的权限:ohos.permission.WRITE_CONTACTSohos.permission.READ_CONTACTS

# 2.1 集成通讯录扩展SDK

dependencies 添加 @finclip/contact-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/contact-sdk": "latest"
  }

# 2.2 注册通讯录扩展SDK

import { FinAppletContact } from '@finclip/contact-sdk';
// ContactSDK初始化
FinAppletContact.init()

# 2.3 通讯录SDK相关api概览

api名称 api描述信息
addPhoneContact 添加手机通讯录联系人。
chooseContact 拉起手机通讯录,选择联系人。

# 3 剪贴板扩展SDK

@finclip/clipboard-sdk是剪贴板扩展SDK。

涉及到的权限:ohos.permission.READ_PASTEBOARD

# 3.1 集成剪贴板扩展SDK

dependencies 添加 @finclip/clipboard-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/clipboard-sdk": "latest"
  }

# 3.2 注册剪贴板扩展SDK

import { FinAppletClipboard } from '@finclip/clipboard-sdk';
// ClipboardSDK初始化
FinAppletClipboard.init()

注意

由于 剪贴板 权限比较敏感,且api比较冷门。您也可以通过注册自定义api的方式添加剪贴板相关的两个api。

注入的源码如下:

import { AbstractAPIManager, FinAppClient, IApiManager, PermissionHelper } from '@finclip/sdk-core';
import { pasteboard } from '@kit.BasicServicesKit';

namespace IClipboardAPI {
  export interface IClipboardData {
    data: string
  }
}

function getClipboardData(args: IApiManager.IInvokeArgs, apiManager: AbstractAPIManager) {
  const callback = args.callback
  const context = apiManager.UIContext
  PermissionHelper.requestPermissions(context, ['ohos.permission.READ_PASTEBOARD'], () => {
    const systemPasteboard = pasteboard.getSystemPasteboard();
    systemPasteboard.getData().then((pasteData) => {
      const text = pasteData.getPrimaryText();
      const res: IApiManager.IInvokeBaseResponse = {
        errMsg: 'getClipboardData:ok',
        data: text
      }
      callback.onSuccess(res)
    }).catch((err: Error) => {
      callback.onFail({ errMsg: err.message })
    });
  }, (index: number) => {
    // 用户拒绝授权
    callback.onFail({ errMsg: PermissionHelper.authDenyMsg })
  })
}


function setClipboardData(args: IApiManager.IInvokeArgs, apiManager: AbstractAPIManager) {
  const callback = args.callback
  const params = args.params as IClipboardAPI.IClipboardData
  const text: string = params.data
  const pasteData: pasteboard.PasteData = pasteboard.createData(pasteboard.MIMETYPE_TEXT_PLAIN, text);
  const systemPasteboard: pasteboard.SystemPasteboard = pasteboard.getSystemPasteboard();
  const res: IApiManager.IInvokeBaseResponse = {
    errMsg: 'setClipboardData:ok'
  }
  systemPasteboard.setData(pasteData).then(() => {
    callback.onSuccess(res)
  }).catch((err: Error) => {
    callback.onFail({ errMsg: err.message })
  });
}

FinAppClient.getInstance()?.registerCustomApi('getClipboardData', getClipboardData)
FinAppClient.getInstance()?.registerCustomApi('setClipboardData', setClipboardData)

# 3.3 剪贴板SDK相关api概览

api名称 api描述信息
setClipboardData 设置剪贴板内容
getClipboardData 获取剪贴板内容

# 4 日历扩展SDK

@finclip/calendar-sdk是日历扩展SDK。

涉及到的权限:ohos.permission.READ_CALENDARohos.permission.WRITE_CALENDAR

# 4.1 集成日历扩展SDK

dependencies 添加 @finclip/calendar-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/calendar-sdk": "latest"
  }

# 4.2 注册日历扩展SDK

import { FinAppletCalendar } from '@finclip/calendar-sdk';
// CalendarSDK初始化
FinAppletCalendar.init()

# 4.3 日历SDK相关api概览

api名称 api描述信息
addPhoneCalendar 添加日历普通事件
addPhoneRepeatCalendar 添加日历重复事件

# 5 百度地图扩展SDK

@finclip/baidu-map-sdk是百度地图扩展SDK。

百度地图使用准备请参考文档:百度地图 (opens new window)

涉及到的权限:ohos.permission.LOCATIONohos.permission.LOCATION_IN_BACKGROUNDohos.permission.APPROXIMATELY_LOCATION

# 5.1 集成百度地图扩展SDK

dependencies 添加 @finclip/baidu-map-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/baidu-map-sdk": "latest"
  }

# 5.2 注册百度地图扩展SDK

# 5.2.1 简单使用

import { FinAppletBaiduMap } from '@finclip/baidu-map-sdk';

// 会初始化百度地图 SDK 和注册地图组件
FinAppletBaiduMap.init('api_key')  // 传入在开放平台申请的 API key

# 5.2.2 只注册组件

import { FinAppletBaiduMap } from '@finclip/baidu-map-sdk';

// 如果项目中已初始化过百度地图,可以只注册地图组件
FinAppletBaiduMap.registerComponent()

# 5.3 修改坐标系

地图 SDK 提供的 CoordType 是从 @bdmap/base 内导出的,具体定义可以参考百度地图文档 (opens new window)

import { FinAppletBaiduMap, CoordType } from '@finclip/baidu-map-sdk';

// 可以使用API修改百度地图坐标系
FinAppletBaiduMap.setBDMapCoordinateType(CoordType.GCJ02)

# 5.4 百度地图SDK相关api概览

api名称 api描述信息
Map组件 视图组件
MapContext 一系列的api
openLocation 查看位置
chooseLocation 选择位置
choosePoi 打开POI列表选择位置

# 6 相册扩展SDK

@finclip/album-sdk是相册扩展SDK。

涉及到的权限:ohos.permission.WRITE_IMAGEVIDEO

# 6.1 集成相册扩展SDK

dependencies 添加 @finclip/album-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/album-sdk": "latest"
  }

# 6.2 注册相册扩展SDK

import { FinAppletAlbum } from '@finclip/album-sdk';
// AlbumSDK初始化
FinAppletAlbum.init()

# 6.3 相册SDK相关api概览

注意

相册扩展SDK使用 ACL 权限实现了 ACLPermissionHandler.saveMediaToPhotosAlbum,如果已自行实现了该代理方法请不要使用该 SDK,会覆盖实现

注入的源码如下:

import { common, Permissions } from '@kit.AbilityKit';
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { CommonUtils, FinAppProxyHandlerManager, IFinProxyHandlerItem, PermissionHelper } from '@finclip/sdk-core';
import { fileIo as fs } from '@kit.CoreFileKit';

export class ACLPermissionHandler extends IFinProxyHandlerItem.ACLPermissionHandler {
  /**
   * 保存图片或视频到相册的方法,默认需要 'ohos.permission.WRITE_IMAGEVIDEO' 权限
   * @param type 需要保存的媒体类型
   * @param realPath 文件的完整路径
   * @param context
   * @returns 成功时不需要返回值,如果失败请将对应的错误信息 reject 返回,比如 reject('auth deny')
   */
  public saveMediaToPhotosAlbum(type: 'image' | 'video', realPath: string,
    context: common.UIAbilityContext): Promise<void> {
    return new Promise((resolve, reject) => {
      const defaultExt = type === 'image' ? 'jpg' : 'mp4'
      const accessType = type === 'image' ? photoAccessHelper.PhotoType.IMAGE : photoAccessHelper.PhotoType.VIDEO
      const permissions: Array<Permissions> = ['ohos.permission.WRITE_IMAGEVIDEO']
      PermissionHelper.requestPermissions(context, permissions, async () => {
        try {
          const helper = photoAccessHelper.getPhotoAccessHelper(context);
          const ext = CommonUtils.getFileExtension(realPath) || defaultExt
          const uri = await helper.createAsset(accessType, ext);
          const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.APPEND)
          const readStream = await fs.createStream(realPath, 'r+')
          const arrayBuffer = new ArrayBuffer(4096)
          let len = await readStream.read(arrayBuffer);
          while (len) {
            await fs.write(file.fd, arrayBuffer)
            len = await readStream.read(arrayBuffer);
          }
          await readStream.close()
          await fs.close(file)
          resolve()
        } catch (err) {
          reject(err.message)
        }
      }, (index: number) => {
        reject(PermissionHelper.authDenyMsg)
      })
    })
  }
}

FinAppProxyHandlerManager.ACLPermissionHandler = new ACLPermissionHandler()

# 7 直播SDK(live SDK)

@finclip/live-sdk是直播扩展SDK。

涉及到的权限:ohos.permission.MICROPHONEohos.permission.MICROPHONEohos.permission.CAMERAohos.permission.INTERNET

# 7.1 集成 live 扩展SDK

dependencies 添加 @finclip/live-sdk

  "dependencies": {
    "@finclip/sdk": "latest",
    "@finclip/live-sdk": "latest"
  }

# 7.2 注册 live 扩展SDK

import { FinAppletLive } from '@finclip/live-sdk';

FinAppletLive.init()

# 7.3 LiveSDK(live-player)相关api概览

api名称 api描述信息
play 播放
stop 停止
pause 暂停
resume 恢复
mute 静音

# 7.4 LiveSDK(live-pusher)相关api概览

api名称 api描述信息
start 开始推流
stop 停止推流,同时停止摄像头预览
pause 暂停推流
resume 恢复推流
startPreview 开启摄像头预览
stopPreview 关闭摄像头预览
switchCamera 切换前后摄像头

# 7.4.1 LiveSDK涉及到的敏感权限

权限 相关接口、组件
摄像头 初始化的时候就会请求权限
录制音频 初始化的时候就会请求权限
© FinClip with ❤ , Since 2017