跳到主要内容

隐私管理

1. 隐私权限检查​

接口原型​

func setPrivacyChecker(checker: TJPrivacyCheckerListener?)

2. 宿主隐私协议接入​

功能介绍​

为了规范开发者调用系统能力的行为,如相机,蓝牙,传感器等。宿主给第三方接入平台提供了权限检查的异步调用接口,第三方平台可以在接口中检查或引导用户授予相关权限。

接入说明​

  1. 实现 TJPrivacyCheckerListener 接口,其中 methodName 的可能值见下节 相关 API 部分。
public protocol TJPrivacyCheckerListener {
/// 获取系统能力的相关权限,比如相机、蓝牙、传感器等
/// - Parameters:
/// - methodName: 需要校验权限的方法名称
/// - callback: 校验结果回调
func requirePrivacy(methodName: String, callback: @escaping TJRequirePrivacyCallback)
}
  1. TJPrivacyCheckerListener 回调中的 TJRequirePrivacyCallback 和 TJPrivacyResult 定义如下,参数:
    1. methodName 为传入的 methodName;
    2. passed 表示是否检查通过;
    3. errorNo 和 errorMessage 会返回给相关 js 中的调用。
public typealias TJRequirePrivacyCallback = (String, TJPrivacyResult) -> Void

public class TJPrivacyResult {

public init(passed: Bool, errNo: Int, errMsg: String) {
self.passed = passed
errorNo = errNo
errorMessage = errMsg
}

func isPassed() -> Bool {
passed
}

func getErrorNo() -> Int {
errorNo
}

func getErrorMessage() -> String {
errorMessage
}

private var passed: Bool
private var errorNo: Int
private var errorMessage: String
}
  1. 通过 RuntimeGameHandle 传入自定义的 PrivacyChecker。
let gameHandle: RuntimeGameHandle
gameHandle.setPrivacyChecker(new RandomPrivacyChecker())

3. 相关 API​

信息类型methodName说明
麦克风startRecorderManagerRecorderManager.start
摄像头startCameraManagertj.createCamera
蓝牙openBluetoothAdapter, createBLEPeripheralServertj.openBluetoothAdapter, tj.createBLEPeripheralServer
陀螺仪传感器startGyroscopetj.startGyroscope
方向传感器startDeviceMotionListeningtj.startDeviceMotionListening
磁场传感器startCompasstj.startCompass
加速传感器startAccelerometertj.startAccelerometer

4. 示例​

一个返回随机结果的 PrivacyChecker。

class RandomPrivacyChecker: TJPrivacyCheckerListener {
private func randomResult() -> PrivacyResult {
let random = Int.random(in: 0...9)
if random < 5 {
return PrivacyResult(granted: true, errorCode: 0, errorMessage: "privacy granted")
} else {
return PrivacyResult(granted: false, errorCode: 1, errorMessage: "privacy denied")
}
}

func requirePrivacy(methodName: String, callback: TJRequirePrivacyCallback?) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
if let callback = callback {
let result = self.randomResult()
print("requirePrivacy: \(methodName) \(result.errorMessage)")
callback.onPrivacyResult(methodName, result)
}
}
}
}