菊风公有云SDK安全合规指南

一、简介

菊风公有云SDK是一套跨平台的高质量、低延迟实时音视频通信解决方案。该方案基于先进的H.265/H.264视频编码、Opus音频编码等技术,结合全球分布式网络与智能路由(SD-ARC®)能力,整合了菊风在实时音视频、即时通讯领域领先的技术与丰富经验,为客户提供稳定、安全、高效的音视频通话能力。

基于HarmonyOS的菊风公有云SDK可应用于HarmonyOS Next版本设备,您可以通过该套公有云SDK API接口,在HarmonyOS平台的应用程序中快速实现实时音视频通话功能及扩展功能。

二、版本更新

为满足日益更新的网络安全、数据安全及个人隐私保护法规要求,我们强烈建议所有SDK使用者接入或升级至最新版本的菊风公有云SDK。最新版本的SDK在功能、性能和安全性上均有优化,并完全符合国家相关监管要求,能更好地协助您保护用户隐私与数据安全。

三、SDK业务功能的配置说明

接入说明:菊风公有云SDK包括基本功能和扩展功能

基本业务功能:音视频通话

扩展业务功能:本地录制、服务端录制、在线消息发送、离线消息通知

功能区分 业务功能 功能介绍 相关个人信息及处理目的 配置方式
基本功能 音视频通话 提供实时音视频通话能力

必要信息:

1、设备信息(如设备型号、操作系统版本、设备类型),用于定位和解决用户在使用过程中遇到的兼容性问题;

2、网络信息(如网络类型、网络连接状态、IP地址),用于判断菊风公有云SDK与服务器的网络连接状态,实现网络恢复后SDK和服务器的重新连接,保证服务的稳定性和连续性;

3、用户自定义信息(如用户ID、频道ID),用于定位和解决用户指定频道内的通话问题和特定终端SDK问题

可选信息:

1、屏幕信息(如屏幕分辨率、屏幕方向),用于优化视频通话的显示效果,提升用户体验;

2、日志信息,当您使用本应用时,我们会自动收集您对我们服务的详细使用情况,作为有关网络日志保存,包括访问日期和时间、应用功能的使用情况、应用崩溃日志(如需排查问题),我们会业务结束后上传相关日志。

3、视频信息(摄像头):用于音视频通话;

4、音频信息(麦克风):用于音视频通话;

5、设备方向信息(监听设备旋转),用于优化视频通话过程中,预览视频画面的显示效果,提升用户体验;

基本功能,可选个人信息配置详见"SDK可选个人信息的配置说明"
扩展功能 本地录制 提供音视频通话过程中本地录制

开启/关闭音频录制:

call?.audioRecord(item, enable, filePath)

参数说明:

item:JCCallItem 对象,不能为空,并且本地缓存的通话列表中要包含此对象

enable:开启关闭录音

- true: 开启录音

- false: 关闭录音

filePath:录音文件的本地保存路径,由用户自行指定,需精确到文件名

返回: 是否正常调用

- true:正常执行调用流程,会收到 JCCallCallback.onCallItemUpdate通知

- false:调用失败,不会收到通知

开启/关闭视频录制:

call?.videoRecord(item, enable, remote, width, height, filePath, bothAudio, keyframe)

参数说明:

item:JCCallItem 对象,不能为空,并且本地缓存的通话列表中要包含此对象

enable:是否开启视频通话录制

- true: 开启

- false: 关闭

remote:是否录制远端视频源

- true: 录制远端视频

- false: 录制本端视频

width:录制视频宽像素

height:录制视频高像素

filePath:录制视频文件的本地保存路径,由用户自行指定,需精确到文件名及格式

bothAudio:是否录制两端音频

- true: 录制两端音频

- false: 录制视频端音频。也就是说 remote 为 true 就录制远端音频,remote 为 false 录制本端音频。

keyframe:关键帧间隔 参数单位秒,参数要求大于0。如果同时存在多个录制,需要每个录制任务开始前分别调用此接口, mp4、avi格式默认60s一个关键帧,rtmp格式默认2s一个关键

返回: 是否正常调用

- true:正常执行调用流程,会收到 JCCallCallback.onCallItemUpdate 通知

- false:调用失败,不会收到通知

服务端录制 提供音视频过程中服务端录制

开启/关闭服务端录制:

mediaChannel?.enableRecord(enable, recordParam);

参数说明:

enable:开启/关闭视频录制

- true: 开启视频录制

- false: 关闭视频录制

recordParam:RecordParam 录制参数,当 enable 为 true 时,可以更改由join时传入的录制参数,不需更改则填 undefined

返回: 调用是否正常

true:正常执行调用流程,会收到 JCMediaChannelCallback onMediaChannelPropertyChange通知

false:调用失败,不会收到通知回调

在线消息发送 SDK登录后发送文字消息给指定对端

发送在线消息:

client?.sendOnlineMessage(this.account, this.content)

参数说明:

userId:对方的 userId

content:要发送的消息内容

返回:

成功返回操作id,与消息发送结果通知 JCClientCallback onOnlineMessageSendResult 中的 operationId 一致

-1:失败,不会触发消息发送结果回调

离线消息通知 SDK登录后接收离线时远端发送的文字消息

收到服务的消息:

void onServerMessageReceive(String type, String params, String message);

参数说明:

type:订阅的消息类型

params:配置信息

message:消息内容

SDK 可选个人信息的配置说明:

接入说明:对于菊风公有云 SDK 可选收集的个人信息的控制,开发者可以通过 "SDK 可选个人信息的配置示例" 说明进行配置。如您关闭可选信息的采集,将会严重影响您使用菊风公有云SDK部分功能的实现和效果,但不会影响音视频通话基本功能的实现,请开发者结合业务实际需要进行合理配置

SDK 可选个人信息的配置示例:

个人信息配置说明
个人信息类型 个人信息采集目的 配置说明
日志信息 用于使用菊风公有云SDK能力过程中出现异常时排查问题
/**
 * 日志等级
 */
export enum LogLevel {
  /**
   * 不打印日志
   */
  LOG_LEVEL_DISABLE = 0,
  /**
   * 只打印 error 等级的日志
   */
  LOG_LEVEL_ERROR = 1,
  /**
   * 只打印 info 和 error 等级的日志
   */
  LOG_LEVEL_INFO = 2,
  /**
   * 打印所有等级的日志
   */
  LOG_LEVEL_DEBUG = 3
}

/**
 * 关闭日志打印等级示例代码
 */
let createParam = new CreateParam(context);
createParam.sdkLogLevel = LogLevel.LOG_LEVEL_DISABLE;
JCClient.create(context, JCManager.sAppkey, this, createParam);
视频信息 用于音视频通话中采集视频画面
/**
 * 开启摄像头
 */
abstract startCamera(): Promise<boolean>;

/**
 * 关闭摄像头
 */
abstract stopCamera(): Promise<boolean>;

// 渲染摄像头画面示例:
JCVideoComponent({
  streamId: streamId,
  mediaDevice: JCManager.getInstance().mediaDevice,
})
  .backgroundColor(Color.Black)
音频信息 用于音视频通话中采集声音
/**
 * 音频参数
 */
export class JCMediaDeviceAudioParam {
  /**
   * 是否自动打开音频输出设备
   */
  autoStartAudioOutputDevice: boolean = true;
  /**
   * 是否自动打开音频输入设备
   */
  autoStartAudioInputDevice: boolean = true;
  ...
}

/**
 * 加入通话默认打开, 关闭麦克风示例代码
 * 建议在一对一通话开始前或者加入频道前进行设置,默认值为 true,表示自动打开
 */
this.mediaDevice.audioParam.autoStartAudioOutputDevice = false;
this.mediaDevice.audioParam.autoStartAudioInputDevice = false;
设备方向信息 用于优化视频通话过程中,预览视频画面的显示效果,提升用户体验;
/**
 * 设备模块初始化参数类
 */
export class JCMediaDeviceInitParam {
  private _useDeviceOrientation: boolean = true;

  /**
   * 设置是否使用设备方向监听
   */
  public set useDeviceOrientation(value: boolean) {
    this._useDeviceOrientation = value;
  }

  /**
   * 获取是否使用设备方向监听
   */
  public get useDeviceOrientation(): boolean {
    return this._useDeviceOrientation;
  }
}

// 是否使用设备方向监听示例代码:
let mediaDeviceInitParam = new JCMediaDeviceInitParam();
mediaDeviceInitParam.useDeviceOrientation = false;
this.mediaDevice = JCMediaDevice.create(this.client, this, mediaDeviceInitParam);
参数说明:useDeviceOrientation 是否使用设备方向监听,true 使用,false不使用,默认true
屏幕顺时针旋转角度和屏幕宽高的分辨率 用于自动根据屏幕方向适配视频渲染画面布局,用于屏幕分享的分辨率参数设置,提升用户体验;

视频渲染根据屏幕方向自动适配示例:

JCVideoComponent({
  streamId: this.remoteStreamId,
  mediaDevice: this.mediaDevice,
  autoAdapterDisplayOrientation: false
})

参数说明:
autoAdapterDisplayOrientation 是否自动根据屏幕方向适配视频渲染画面布局,true 自动适配,false 不根据屏幕方向适配,默认true
streamId 视频渲染的流id
mediaDevice JCMEdiaDevice对象

开启/关闭屏幕分享:

public abstract enableScreenShare(enable: boolean, screenShareParam: ScreenShareParam | undefined): boolean;

//开启屏幕分享的示例代码:
let screenShareParam = new ScreenShareParam();
JCManager.getInstance().mediaChannel?.enableScreenShare(true, screenShareParam);

四、隐私政策更新

菊风公有云SDK 使用者应在《隐私政策》中明确说明本 SDK 收集使用个人信息的目的、方式和范围。为方便使用者,我们提供以下告知文案示例供参考:"我们使用菊风公有云SDK 来提供 XX 服务。需要收集您的 XX 信息。我们会确保这些信息的安全,且不会用于其他目的。"

五、权限调用合规要求

菊风公有云SDK为实现音视频通信功能所必需的系统权限、使用目的及建议申请时机如下,因相关权限的不申请将会对其对应的功能造成影响,您可以结合业务实际需要进行合理配置。

权限名称 权限说明 是否可选 使用目的 申请时机
ohos.permission.INTERNET 网络访问权限 必选 访问网络 初始化时调用
ohos.permission.GET_NETWORK_INFO 获取数据网络信息 必选 确认网络状态 初始化时调用
ohos.permission.GET_WIFI_INFO 获取wifi网络信息 必选 确认网络状态 初始化时调用
ohos.permission.KEEP_BACKGROUND_RUNNING 后台运行 可选 切换到后台后仍可采集和播放 初始化时调用
ohos.permission.MODIFY_AUDIO_SETTINGS 修改应用音频设置 可选 修改系统音频设置 初始化时调用
ohos.permission.MICROPHONE 使用麦克风 可选 使用视频通话功能,需要开启麦克风 打开麦克风时调用
ohos.permission.CAMERA 使用相机 可选 使用视频通话功能,需要开启摄像头 打开摄像头时调用
ohos.permission.USE_BLUETOOTH 使用蓝牙 可选 使用通话功能,需要蓝牙权限 初始化时调用

必选权限

以下为必选权限,必须配置以下权限才能满足基本的音视频通话能力:

"requestPermissions": [
  {
    //网络权限
    "name": "ohos.permission.INTERNET"
  },
  {
    //获取数据网络状态权限
    "name": "ohos.permission.GET_NETWORK_INFO"
  },
  {
    //获取Wifi网络状态权限
    "name": "ohos.permission.GET_WIFI_INFO"
  }
]

可选权限

以下为可选权限,可根据您的业务需要进行配置:

"requestPermissions": [
  {
    //蓝牙权限
    "name": "ohos.permission.USE_BLUETOOTH"
  },
  {
    //麦克风权限
    "name": "ohos.permission.MICROPHONE"
  },
  {
    //音频设置权限
    "name": "ohos.permission.MODIFY_AUDIO_SETTINGS"
  },
  {
    //摄像头权限
    "name": "ohos.permission.CAMERA"
  }
]

六、隐私政策披露要求与示例说明

在您接入、使用菊风公有云SDK服务前,我们要求您在隐私政策中向用户告知SDK的名称、提供方、收集个人信息类型、使用目的及隐私政策链接,并依法获取用户的同意。若您的服务涉及处理敏感个人信息或向境外提供个人信息,建议您单独弹窗获取用户的单独同意。您可参考以下方式以文字形式向用户告知:

  1. 1.第三方SDK名称:菊风公有云SDK
  2. 2.第三方公司名称:宁波菊风系统软件有限公司
  3. 3.合作目的:为应用提供音视频通话能力
  4. 4.收集个人信息类型及用途:设备信息(如设备型号、操作系统版本、设备类型)、网络信息(如网络类型、网络连接状态、IP地址)、日志信息,用于音视频通话基本功能场景中保证服务在不同设备上兼容性,以确保能准确进行音视频通话;用户自定义信息(如用户ID、频道ID),用于定位和解决用户指定频道内的通话问题和特定终端SDK问题;屏幕信息(如屏幕分辨率、屏幕方向)、视频信息(摄像头)、音频信息(麦克风)、设备方向信息(监听设备旋转)用于音视频通话过程中互相通信中的媒体数据交互,以及优化视频通话过程中,预览视频画面的显示效果,提升用户体验;
  5. 5.数据处理方式:通过去标识化、加密传输及其他安全方式
  6. 6.隐私政策链接https://cloud.juphoon.com/cn/privacy-cloud-sdk.html
  7. 7.官网链接:https://www.juphoon.com/
  8. 8.向最终用户披露条款的示例

为保障最终用户的知情权,菊风公有云SDK 使用者需向用户清晰披露 SDK 相关信息,以下为具体文字示例,可根据实际业务场景调整使用:

"您好!为向您提供音视频通话相关服务,我们的应用会集成【菊风公有云SDK】,该 SDK 由宁波菊风系统软件有限公司提供。

1、 SDK 所需处理的个人信息类型:

基础设备与应用信息:用户自定义信息(如用户ID、通话频道ID)、系统基本信息(如设备型号、操作系统版本、设备类型)、系统设置信息

网络信息:网络类型、网络连接状态、IP地址

音视频信息:在使用音视频通话时,会通过摄像头获取视频画面信息,通过麦克风获取音频信息(仅用于完成当前服务,服务结束后按规则存储或销毁)

日志信息:当您使用音视频通话时,会自动收集音视频通话的详细使用情况,作为有关网络日志保存,包括访问日期和时间、应用功能的使用情况、应用崩溃日志(如需排查问题),我们会在音视频通话业务结束后上传相关日志。

2、信息处理目的:上述信息仅用于保障 SDK 正常运行,实现音视频编码传输、网络连接稳定性维护等功能,不会用于与当前服务无关的其他用途。

如您对上述信息有疑问,可通过宁波菊风系统软件有限公司官方渠道联系咨询:官方网站 https://www.juphoon.com/、电子邮件 support@juphoon.com、商务合作电话 13056832331。

最终用户授权同意说明以及示例如下:

应用首次运行时应当有隐私弹窗,隐私弹窗中应公示简版隐私政策内容并附完整版隐私政策链接,并明确提示最终用户阅读并选择是否同意隐私政策;隐私弹窗应提供同意按钮和拒绝同意的按钮,并由最终用户主动选择。如涉及敏感个人信息,应当取得您最终用户的单独授权同意,您可以通过单独弹窗的形式来实现最终用户的授权,并在您的《隐私政策》中针对敏感个人信息通过字体加粗或其他显著标识显示。

隐私政策授权弹窗示例:

隐私政策授权弹窗示例

敏感个人信息隐私政策披露示例:"摄像头相关信息:用于实时音视频通话功能"

敏感个人信息授权弹窗示例:

敏感个人信息授权弹窗示例

最终用户行使权利说明如下:

开发者在其 APP 中集成菊风公有云 SDK 后,菊风公有云 SDK 的正常运行会收集必要的最终用户信息用于实时音视频通话或扩展功能目的。开发者应根据相关法律法规为最终用户提供行使个人信息主体权利的路径或功能,需菊风公有云 SDK 配合的,请与菊风公司及时进行联系,我们将与开发者协同妥善解决最终用户的诉求。

七、未成年人保护

菊风公有云SDK服务本身不直接面向未成年人。如果您的应用可能被未满14周岁的未成年人使用,请务必在您的应用中设置适当的年龄门槛,并确保在父母或其他监护人同意的前提下,依照相关法律法规处理未成年人的个人信息。

八、SDK初始化

为确保合规,请在获得用户同意后,再初始化菊风公有云SDK。建议参考以下步骤:

  1. 申请权限:在用户触发音视频功能时,向用户申请所需的系统权限(如摄像头、麦克风)。
  2. 获取同意:确保已获得用户对《菊风公有云SDK隐私保护政策》的同意,特别是其中关于第三方SDK处理个人信息的条款。
  3. 初始化SDK:在获得上述同意后,调用菊风公有云SDK的初始化函数。
  4. 验证状态:检查菊风公有云SDK是否成功初始化,并处理初始化失败的情况。

初始化示例代码:

export class JCManager implements JCClientCallback, JCCallCallback,
  JCMediaChannelCallback, JCMediaDeviceCallback {
  private mContext: Context | undefined;
  public client: JCClient | undefined;
  public call: JCCall | undefined;
  public mediaDevice: JCMediaDevice | undefined;
  public mediaChannel: JCMediaChannel | undefined;
  public static sAppkey: string;

  static getInstance(): JCManager {
    return JCManager.INSTANCE;
  }

  async initialize(context: Context, createParam: CreateParam): Promise<boolean> {
    this.mContext = context;
    let createParam = new CreateParam(context);
    this.client =
      JCClient.create(context, JCManager.sAppkey, this, createParam);
    if (this.client.getState() == ClientState.STATE_NOT_INIT) {
      return false;
    }
    let mediaDeviceInitParam = new JCMediaDeviceInitParam();
    mediaDeviceInitParam.useDeviceOrientation = true;
    this.mediaDevice = JCMediaDevice.create(this.client, this, mediaDeviceInitParam);
    this.mediaChannel = JCMediaChannel.create(this.client, this.mediaDevice, this);
    this.call = JCCall.create(this.client, this.mediaDevice, this);
    return true
  }
}

九、其他说明

本指南旨在协助您合规地集成和使用菊风公有云SDK。如果您在使用过程中有任何疑问或需要进一步的合规支持,欢迎随时与我们联系。

您可以通过以下方式与我们取得联系:

官方网站:https://www.juphoon.com/

技术支持邮箱:support@juphoon.com

合作电话:13056832331

更新时间:2025年12月30日