华为云用户手册

  • 自定义是否开启会议高清优先 在OpenSDKConfig中配置是否开启会议高清优先的功能 开启高清优先后 1.设为开启高清视频后,可以本端发送高清视频 2.设为开启高清视频后,可以选看高清视频 3.不根据手机性能等因素降低发送的分辨率 使用场景 对会议的视频高清程度有要求的场景 注意事项 1.SDK初始化的时候必须传入这个配置sdkConfig才会生效 会前设置是否开启优先传输高清画质,开启后就会忽略网络及手机性能等因素,优先传输高清画质 示例代码 12 OpenSDKConfig sdkConfig = new OpenSDKConfig(Context) .setHighResolutionFirst(true) 父主题: 基础配置
  • uploadSelfAvatarWithFilePath:callback: 接口描述 该接口用于上传用户自己头像。 注意事项 文件路径为头像路径。 大小限制200k。 只支持jpg、png。 为了头像展示效果,建议图片宽高比为1:1。 回调error表示错误信息,nil表示成功。 方法定义 1 - (void)uploadSelfAvatarWithFilePath:(NSString *_Nullable)filePath callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 参数 是否必须 类型 描述 filePath 否 NSString * 头像文件路径 返回值 无 示例代码 1 2 3 4 5 6 7 8 910 /// 上传用户个人头像- (void)uploadSelfAvatar { [[HWMBizSdk getBizOpenApi] uploadSelfAvatarWithFilePath:self.headImgPath callback:^(NSError * _Nullable error, id _Nullable result) { if (error) { [UIUtil showMessage:[NSString stringWithFormat:@"上传失败%@", error.localizedDescription]]; } else { [UIUtil showMessage:@"上传成功"]; } }];}
  • 注意事项,使用前必看 需要使用通知方法时,必须注册代理对象。 两种方式: 初始化时,对HWMOpenSDKConfig对象的属性赋值 123 HWMOpenSDKConfig *config = [[HWMOpenSDKConfig alloc] init];//示例根据需求使用对应代理config.globalHandler = [NotifyMessageHandler sharedInstance]; 使用前使用[HWMSdk getSdkConfig]获取初始化对象给属性赋值 12 //示例根据需求使用对应代理[HWMSdk getSdkConfig].globalHandler = [NotifyMessageHandler sharedInstance]; 代理方法必须写在代理对象中 使用代理时保证代理对象存在
  • logout 接口描述 该接口用于退出已登录的会议账号。 注意事项 请在已登录的场景下调用。 回调error表示错误信息,nil表示成功。 方法定义 1 - (void)logout:(_Nonnull HWMSDKLogoutCompleteHandler)callback; 参数描述 无。 返回值 表1 退出返回HWMLogoutResult 参数 类型 描述 userUuid NSString * 账号uuid account NSString * 登录账号 thirdAccount NSString * appid登录的三方账号 示例代码 1 2 3 4 5 6 7 8 910 /// 退出登录- (void)logout { [[HWMSdk getOpenApi] logout:^(NSError * _Nullable error, HWMLogoutResult * _Nullable result) { if (error == nil) { NSLog(@"登出成功"); } else { NSLog(@"登出失败"); } }];}
  • cancelConf 接口描述 该接口用于取消预约的会议。 注意事项 只有主持人可以取消会议 会中调用会结束会议 方法定义 1 - (void)cancelConf:(NSString *_Nonnull)confId callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 参数说明 参数 是否必须 类型 描述 confId 是 NSString * 会议ID。 示例代码 1 2 3 4 5 6 7 8 910 /// 取消会议- (void)cancelConf { [[HWMBizSdk getBizOpenApi] cancelConf:@"986927771" callback:^(NSError * _Nullable error, id _Nullable result) { if (error) { NSLog(@"%@",error.localizedDescription); } else { NSLog(@"取消会议成功"); } }];}
  • 60.11.6更新内容 新增会议支持自动录制,新增允许自动录制会议isAutoRecord字段, 注意:会议开始后是否自动开启录制,默认关闭。开启自动录制会议时必须开启录制会议 创建会议HWMCreateConfParam参数说明 预约会议、编辑会议HWMOrderConfParam参数说明 新增自定义会议来电接听按钮显示 新增SDK库:HWRTCEngine.framework,具体使用请见新增HWRTCEngine库 父主题: 版本更新内容
  • 方法定义 1 - (NSView *)socialShareView:(HWMConfStateInfo *)confInfo; 示例代码 - (NSView *)socialShareView:(HWMConfStateInfo *)confDetail { if (!self.socialView) { self.socialView = [[HWMSocialView alloc] initWithFrame:NSMakeRect(0, 0, 500, 300)]; self.socialView.wantsLayer = YES; self.socialView.layer.backgroundColor = [NSColor whiteColor].CGColor; } self.socialView.confDetail = confDetail; return self.socialView;} 表1 参数说明 参数 类型 描述 confInfo HWMConfStateInfo * 会中会议状态详情 表2 HWMConfStateInfo 说明 参数 类型 描述 confId NSString * 会议id。 confSubject NSString * 会议主题。 chairmanPwd NSString * 主持人密码。 generalPwd NSString * 来宾密码。 startTimeStamp NSInteger 会议开始时间,UTC时间戳,精度秒。 endTimeStamp NSInteger 会议结束时间,UTC时间戳,精度秒。 videoConf BOOL 是否是视频会议。 confScheduleName NSString * 预订者姓名。 chairJoinUri NSString * 主持人加入会议uri链接。 guestJoinUri NSString * 普通与会者加入会议uri链接。 vmrConferenceId NSString * VMR会议显示ID。 role HWMConfRoleType 角色。 orgId NSString * 会议所属的企业id。用户判断是否是外部人员入会,登录结果中有个corpId上报,登录的企业ID与会议的企业ID不是一个,说明为外部。 customInfo NSString * 自定义信息(会议详情、会中消息推送可以查看)
  • 第三方客户端调用Exit接口,需要等待一段时间后才能退出 客户案例: 某客户集成了会议Win SDK,客户应用退出后,发现会议进程仍在运行,exit回调时间很长。 原因分析: 该客户在logout的回调里面调用exit接口,exit接口要等待logout的回调结束才能销毁资源,logout的回调在等exit退出,造成线程死锁,导致如上现象。 正确方案: 在logout回调结束后,再调用exit接口,详见下图。点击查看更多接口调用时序图。 图1 接口调用时序图 父主题: Windows SDK
  • 自定义日志保存路径 在OpenSDKConfig中配置自定义的SDK日志保存的路径 使用场景 SDK默认的日志路径是/sdcard/Android/data/应用的包名/files/log 用户可以根据自己需要修改日志的存放路径 注意事项 1.自定义日志保存路径后,取日志也确保使用相应的路径,取日志参考获取Android SDK的日志 2.SDK初始化的时候必须传入这个配置sdkConfig才会生效 示例代码 1 2 3 4 5 6 7 8 910111213 //自定义日志保存路径public class CustomLoggerHandle implements ILoggerHandle { private Application application; public CustomLoggerHandle(Application application) { this.application = application; } //自定义日志保存地址 @Override public String getLogPath() { return FileUtil.getExternalFilesDir(this.application) + "/log/meeting/"; }}sdkConfig.setLoggerHandle(new CustomLoggerHandle()); 父主题: 基础配置
  • 自定义菜单设置 示例代码 1234 ToolBarMenuProxy toolBarMenuProxy = new ToolBarMenuProxy();toolBarMenuProxy.setConfAudioToolbarHandle(new CustomConfAudioToolbarHandle());toolBarMenuProxy.setConfVideoToolbarHandle(new CustomConfVideoToolbarHandle());sdkConfig.setToolBarMenuProxy(toolBarMenuProxy);
  • 方法定义 1 - (void)downloadHeadPortraitWithThirdAccount:(NSString *)thirdAccount account:(NSString *)account number:(nonnull NSString *)number completionBlock:(void(^)(NSError *_Nullable error, NSString *_Nullable headImagePath))completionBlock;
  • 参数描述 表1 参数说明 参数 类型 描述 thirdAccount NSString * appid登录场景下优先使用此字段。 account NSString * 账号 密码登录场景下 优先使用此字。 number NSString * 跨企业场景优先使用此字段。 completionBlock void(^)(NSError *_Nullable error, NSString *_Nullable headImagePath) 结果回调。
  • 自定义会议接听时摄像头/麦克风开关 在OpenSDKConfig中配置是否在接听会议的时候自动打开摄像头或者麦克风入会 接听会议的时候sdk通过该回调接口获取摄像头和麦克风是否打开在入会的时候设置是否开启摄像头麦克风 使用场景 一般应用设置中有是否开启摄像头麦克风的用户设置项,通过自定义该回调接口即可实现会议接听时候的摄像头麦克风的开启情况和用户的设置项保持一致 注意事项 1.摄像头的开启需要先有权限,没有权限的情况下无法开启摄像头 2.SDK初始化的时候必须传入这个配置sdkConfig才会生效 示例代码 1 2 3 4 5 6 7 8 9101112131415 public class MyDeviceStrategyWhenConfAccept implements IDeviceStrategyWhenConfAccept { @Override public boolean isTurnOnCameraWhenConfAccept() { //入会时是否打开摄像头 return DemoUtil.needCustom(NeedCustomType.CONF_OPEN_CAMERA); } @Override public boolean isTurnOnMicWhenConfAccept() { //入会时是否打开麦克风 return DemoUtil.needCustom(NeedCustomType.CONF_OPEN_MIC); }}sdkConfig.setDeviceStrategyWhenConfAccept(new MyDeviceStrategyWhenConfAccept()); 父主题: 基础配置
  • 自定义会中通知栏 该接口用于自定义通知栏中的会议通知图标,默认是如图1所示 使用场景 通知栏中通知图标使用和自己应用图标一致的场景 注意事项 1.SDK初始化的时候必须传入这个配置sdkConfig才会生效 图1 自定义会中通知栏 示例代码 123456 sdkConfig.setNotificationStrategy(new INotificationStrategy() { @Override public int resSmallIcon() { return R.mipmap.ic_launcher; } }); 父主题: 界面定制
  • 账号状态变更通知 在OpenSDKConfig中配置登录账号相关通知回调的监听,以监测账号失效等场景 使用场景 账号被踢:onKickedOut Token失效:onTokenInvalid 账号被锁定:onAccountLocked 账号密码错误:onAccountOrPasswordError CA证书校验失败:onCaInvalid 注意事项 SDK初始化的时候必须传入这个配置sdkConfig才会生效 示例代码 1 2 3 4 5 6 7 8 91011121314151617181920212223 sdkConfig.setAccountEventHandle(new IAccountEventHandle() { @Override public void onKickedOut(@Nullable KickOutState kickOutState) { Log.i(TAG, "您的账号在其他终端登录"); } @Override public void onAccountOrPasswordError(@Nullable AccountOrPasswordErrorState accountOrPasswordErrorState) { Log.i(TAG, "onAccountOrPasswordError"); } @Overridepublic void onTokenInvalid(@Nullable TokenInvalidState tokenInvalidState) { // Token失效后,需要进行重新登录(退出并登录),否则会影响创会预约会议等基本功能 Log.i(TAG, "onTokenInvalid"); } @Override public void onAccountLocked(@Nullable AccountLockedState accountLockedState) { Log.i(TAG, "onAccountLocked"); } @Override public void onCaInvalid(@Nullable CaInvalidState caInvalidState) { // CA证书校验失败,需要退出登录 Log.i(TAG, "onCaInvalid"); } }); 父主题: 通知参考
  • 设置第三方推流视频镜像 接口描述 该接口用于第三方推流时设置本地视频窗口前置摄像头镜像模式。 注意事项 需要放在UI主线程调用,使用前置摄像头设置左右镜像类型,后置摄像头不能镜像。 方法定义 12345 /** * 设置本地视频窗口镜像模式 * @param mirrorType 窗口镜像模式 0:不做镜像(默认值) 1:上下镜像(目前未支持) 2:左右镜像 */ void setLocalVideoMirrorType(MirrorType mirrorType); 参数描述 表1 参数说明 参数 是否必须 类型 描述 mirrorType 是 MirrorType 窗口镜像模式 MIRROR_NONE(0, "不做镜像") MIRROR_UP_DOWN(1, "上下镜像")(目前未支持) MIRROR_LEFT_RIGHT(2, "左右镜像") 示例代码 HWMBizSdk.getBizOpenApi().setLocalVideoMirrorType(MirrorType.MIRROR_LEFT_RIGHT)); 父主题: 音视频数据流
  • 参数描述 表1 参数说明 参数 类型 描述 status HWMSDKConfStatus 会议通话状态。 表2 枚举HWMSDKConfStatus说明 枚举值 描述 HWMSDKConfStatusIdle 空闲状态 (会议结束) HWMSDKConfStatusIncoming 正在来电 HWMSDKConfStatusCallingOut 正在呼出 HWMSDKConfStatusWaiting 正在等待 HWMSDKConfStatusConnected 已接通 HWMSDKConfStatusRecalling 正在重呼
  • 示例代码 1 2 3 4 5 6 7 8 91011121314151617181920212223242526272829303132 /// 创建会议- (void)creatMeeting { HWMCreateConfParam *param = [[HWMCreateConfParam alloc] init]; param.subject = @"会议标题"; param.confType = HWMConfTypeVideoData; param.needPassword = YES;// 会议是否需要设置密码,默认不需要 param.isCameraOn = YES;// 是否打开摄像头, 默认关闭 param.isMicOn = YES;// 是否打开麦克风, 默认打开 param.isRecordOn = NO;// 是否打开会议录制, 默认关闭 param.joinConfRestrictionType = HWMJoinConfRestrictionAll;// 允许入会范围 // 与会者列表 if (self.selectedMemebrs) { __block NSMutableArray *members = [[NSMutableArray alloc] init]; [self.selectedMemebrs enumerateObjectsUsingBlock:^(HWMContactSelectedModel * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { HWMCreateConfMember *member = [[HWMCreateConfMember alloc] init]; member.accountId = obj.accountId; member.number = obj.number; member.name = obj.name; member.thirdUserId = obj.thirdUserId; [members addObject:member]; }]; param.members = members; } [[HWMSdk getOpenApi] createConf:param callback:^(NSError * _Nullable error, HWMCreateConfResult * _Nullable result) { [self hideLoading]; if (error) { NSLog(@"创会失败%@", error.localizedDescription); }else{ NSLog(@"创会成功"); } }];} 与会者列表可以携带与会者创建会议,创建会议成功后服务端会呼叫携带的与会人入会,不需要可以不传。
  • 示例代码 1 2 3 4 5 6 7 8 910111213141516 /// AppId 登录接口- (void)login { HWMAppIDLoginParam *appidInfo = [[HWMAppIDLoginParam alloc] init]; appidInfo.thirdUserId = getThirdUserId(); appidInfo.expireTime = 1599618620; appidInfo.nonce = getNonce(); appidInfo.userName = getUserName(); appidInfo.signature = getSignature(); [[HWMSdk getOpenApi] login:appidInfo callback:^(NSError * _Nullable error, HWMLoginResult * _Nullable result) { if (error == nil) { NSLog(@"登录成功"); }else{ NSLog(@"登录失败"); } }];}
  • 示例代码 1 2 3 4 5 6 7 8 910 /// 退出登录- (void)logout { [[HWMSdk getOpenApi] logout:^(NSError * _Nullable error, id _Nullable result) { if (error == nil) { NSLog(@"登出成功"); } else { NSLog(@"登出失败"); } }];}
  • 注意事项,使用通知前请查看 需要使用通知方法时,必须注册代理对象。 两种单代理注册方式: 初始化时,对HWMOpenSDKConfig对象的属性赋值 123 HWMOpenSDKConfig *config = [[HWMOpenSDKConfig alloc] init];//示例根据需求使用对应代理config.confSettingHandler = [NotifyMessageHandler sharedInstance]; 使用前使用[HWMSdk getSdkConfig]获取初始化对象给属性赋值 12 //示例根据需求使用对应代理[HWMSdk getSdkConfig].confSettingHandler = [NotifyMessageHandler sharedInstance]; 多代理注册方式: 订阅代理 123 //示例根据需求使用对应代理HWMOpenSDKConfig *config = [HWMSdk getSdkConfig].confSettingHandler;[config subscribeGlobalNotificationHandler:[NotifyMessageHandler sharedInstance]]; 取消订阅 123 HWMOpenSDKConfig *config = [HWMSdk getSdkConfig].confSettingHandler;//示例根据需求使用对应代理[config unsubscribeGlobalNotificationHandler:[NotifyMessageHandler sharedInstance]]; 代理方法必须写在代理对象中 使用代理时保证代理对象存在 父主题: 通知参考
  • editConf 接口描述 该接口用于编辑未开始的预约会议。 注意事项 会议未开始前且自己是主持人才可以调用接口。 预约会议中携带的与会者在编辑会议时需要传入userUuid(会议详情中每个与会者带有该参数)。 所有字段必填,编辑修改的字段可来源于用户输入,其他不想修改的属性通过会议详情参数获取。 方法定义 1 - (void)editConf:(HWMOrderConfParam *_Nonnull)param callback:(_Nonnull HWMSDKCompleteHandler)callback; 参数描述 表1 HWMOrderConfParam参数说明 参数 是否必须 类型 描述 confId 是 NSString * 会议ID。 isLiveOn 否 BOOL 是否开启直播。 其余参数参见预约会议。 示例代码 1 2 3 4 5 6 7 8 910111213141516171819 /// 编辑会议- (void)editConf { HWMOrderConfParam * param = [[HWMOrderConfParam alloc] init]; param.confSubject = @"会议名称"; param.startTime = 1598759580; param.duration = 15; param.isAutoRecord = NO; param.timeZone = 56; param.vmrId = @"";// vmr会议需要传入vmrId param.callInRestrictionType = HWMCallRestrictionAll; param.confId = @"986927771"; [[HWMBizSdk getBizOpenApi] editConf:param callback:^(NSError *_Nullable error, id _Nullable result) { if (error) { NSLog(@"编辑会议失败:%@", error.localizedDescription); } else { NSLog(@"编辑会议成功"); } }];}
  • 示例代码 1 2 3 4 5 6 7 8 910111213 /// 登录处理/// 认证鉴权用的账号密码建议在配置文件或者环境变量中密文存放,使用时解密,确保安全- (void)login { NSString *account = getAccount(); NSString *password = getPassword(); [[HWMSdk getOpenApi] login:account password:password callback:^(NSError * _Nullable error, HWMLoginResult * _Nullable result) { if (error == nil) { NSLog(@"登录成功"); }else{ NSLog(@"登录失败"); } }];}
  • 3类接口描述 Mac SDK的接口分为同步Api、异步Api、全局回调。 同步Api:App主动调用SDK的接口,用于完成某项任务。比如初始化接口initWithConfig。 异步Api:调用SDK接口的时候都会以callback回调方式请求结果。 全局回调:由华为云会议服务端或SDK内部触发的事件通知,SDK以 消息通知 接口的形式通知给App。比如会议来电通知onConfStatusChanged。
  • uploadSelfAvatar: success: fail: 接口描述 该接口用于上传用户自己头像。 注意事项 传入头像文件路径path。 大小限制200k。 只支持jpg、png。 为了头像展示效果,建议图片宽高比为1:1。 回调success表示成功,fail表示失败,error错误信息。 方法定义 1 - (void)uploadSelfAvatar:(NSString *)path success:(void (^)(void))success fail:(void (^)(NSError *error))fail; 参数描述 表1 参数 是否必须 类型 描述 path 是 NSString 图片的全路径 返回值 无 示例代码 12345678 /// 上传用户个人头像- (void)uploadSelfAvatar { [[HWMBizSdk getBizOpenApi] uploadSelfAvatar:path success:^{ NSLog(@"set succeeded"); } fail:^(NSError *_Nonnull error) { NSLog(@"%@", error.description); }];}
  • 常见错误码 表1 枚举HWMUISDKErrorCode说明 变量值 值 描述 HWMUISDKErrorCodeContactNotFound 40000 联系人不存在 HWMUISDKErrorCodeNumberAndAccountEmpty 40001 账号和号码不能都为空 HWMUISDKErrorCodeArgsError 40002 参数错误 HWMUISDKErrorCodeRepeatRequest 40003 重复调用方法 HWMUISDKErrorCodeTimeOut 40004 超时 HWMUISDKErrorCodeUnInit 40005 未初始化 HWMUISDKErrorCodeArgsLengthOverrun 40006 参数长度超限 HWMUISDKErrorCodePasswordOrAccountEmpty 40007 账号或密码不能都为空 HWMUISDKErrorCodeConfIdEmpty 40008 会议id不能为空 HWMUISDKErrorCodeUnLogin 40009 未登录 HWMUISDKErrorCodeLoginIng 40010 登录中 HWMUISDKErrorCodeSubjectTooLong 40011 会议主题长度不能超过50 HWMUISDKErrorCodeConfIdTooLong 40012 会议ID长度不能超过20 HWMUISDKErrorCodeConfOrCallExit 40013 正在会议或呼叫中 HWMUISDKErrorCodeAPPIDInfoIllegal 40014 APPID 信息入参不合法 HWMUISDKErrorCodeVMRHostPasswordLengthlegal 40015 主持人密码长度不合法 HWMUISDKErrorCodeVMRNameEmpty 40016 VMR名字为空 HWMUISDKErrorCodeCallInterfaceError 40110 底层调用会议的接口失败 HWMUISDKErrorCodeConfStartTimeEarly 40115 会议的开始时间早于当前时间 HWMUISDKErrorCodeNotInConf 40116 不在会议中 HWMUISDKErrorE2EEncryptAlgorithmError 41117 端到端加密算法不对称 HWMUISDKErrorCodeCallResourceNoEnough 115022001 企业并发资源不足 父主题: 错误码参考
  • 示例代码 1 2 3 4 5 6 7 8 9101112131415161718192021 /// 编辑会议- (void)editConf { HWMOrderConfParam * param = [[HWMOrderConfParam alloc] init]; param.confSubject = @"会议名称"; param.startTime = 1598759580; param.duration = 15; param.confType = HWMConfTypeVideo; param.isNeedConfPwd = YES; param.isRecordOn = NO; param.timeZone = 56; param.vmrId = @"";// vmr会议需要传入vmrId param.callInRestrictionType = HWMJoinConfRestrictionAll; param.confId = @"986927771"; [[HWMBizSdk getBizOpenApi] editConf:param callback:^(NSError *_Nullable error, id _Nullable result) { if (error) { NSLog(@"编辑会议失败:%@", error.localizedDescription); } else { NSLog(@"编辑会议成功"); } }];}
  • 注意事项,使用通知前请查看 需要使用通知方法时,必须注册代理对象。 两种方式: 初始化时,对HWMOpenSDKConfig对象的属性赋值 123 HWMOpenSDKConfig *config = [[HWMOpenSDKConfig alloc] init];//示例根据需求使用对应代理config.globalHandler = [NotifyMessageHandler sharedInstance]; 使用前使用[HWMSdk getSdkConfig]获取初始化对象给属性赋值 12 //示例根据需求使用对应代理[HWMSdk getSdkConfig].globalHandler = [NotifyMessageHandler sharedInstance]; 代理方法必须写在代理对象中 使用代理时保证代理对象存在 父主题: 通知参考
  • 示例代码 1 2 3 4 5 6 7 8 910111213141516171819 /// 编辑会议- (void)editConf { HWMOrderConfParam * param = [[HWMOrderConfParam alloc] init]; param.confSubject = @"会议名称"; param.startTime = 1598759580; param.duration = 15; param.isAutoRecord = NO; param.timeZone = 56; param.vmrId = @"";// vmr会议需要传入vmrId param.callInRestrictionType = HWMJoinCallRestrictionAll; param.confId = @"986927771"; [[HWMBizSdk getBizOpenApi] editConf:param callback:^(NSError *_Nullable error, id _Nullable result) { if (error) { NSLog(@"编辑会议失败:%@", error.localizedDescription); } else { NSLog(@"编辑会议成功"); } }];}
  • 共享Bundle Id相关说明 ScreenShareExtension插件bundle Id格式: 主App bundle Id + ScreenShareExtension ScreenShareExtensionSetupUI插件bundle Id格式: 主App bundle Id + ScreenShareExtensionSetupUI 例:主App bundle Id:com.xx.xxScreenShareExtension插件bundIe Id:com.xx.xx.ScreenShareExtensionScreenShareExtensionSetupUI插件bundIe Id:com.xx.xx.ScreenShareExtensionSetupUI iOS端屏幕共享需要添加iOS Extension并实现相关代码,以下步骤用于说明如何集成SDK进行屏幕共享Extension的开发。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全