// // JCClient.h // JCSDK-OC // // Created by maikireton on 2017/8/10. // Copyright © 2017年 juphoon. All rights reserved. // #import #import "JCClientCallback.h" /** * @defgroup 登录模块 * @{ * 用于初始化 sdk 以及登录 Juphoon Cloud 平台 */ /** * 创建参数 */ @interface JCClientCreateParam : NSObject /** * sdk 相关信息存放目录 * * 包括账号信息,日志信息等,默认目录为 沙盒 Documents/JuphoonCloud 路径下 * * @note App 必须保证指定的目录可写 */ @property (nonatomic, copy) NSString* __nonnull sdkInfoDir; /** * sdk 日志目录 * * 默认在 @ref sdkInfoDir 下的 log 目录下 * * @note App 必须保证指定的目录可写 */ @property (nonatomic, copy) NSString* __nonnull sdkLogDir; /** * sdk 日志等级,默认是 @ref JCLogLevelInfo * * - @ref JCLogLevelDisable : 不打印日志 * - @ref JCLogLevelError : 只打印 error 等级的日志 * - @ref JCLogLevelInfo : 只打印 info 和 error 等级的日志 * - @ref JCLogLevelDebug : 打印所有等级的日志 */ @property (nonatomic) JCLogLevel sdkLogLevel; @end /** * 登录参数 * * 用于 {@link JCClient#login:password:loginParam: login} 方法最后一个参数 */ @interface JCClientLoginParam : NSObject /** * 设备id * * 一般模拟器使用,因为模拟器可能获得的设备id都一样 */ @property (nonatomic, copy) NSString* __nonnull deviceId; /** * https代理地址 * * 例如 192.168.1.100:3128 */ @property (nonatomic, copy) NSString* __nullable httpsProxy; /** * 登录账号不存在的情况下是否内部自动创建该账号,默认会自动创建 * - true: 自动创建账号 * - false: 不自动创建账号 */ @property (nonatomic) bool autoCreateAccount; /** * 终端类型 * * 如果需要多终端登录,则需要为每一类型的设备设置一个类型 * 例如需要手机端和PC端同时能登录,则手机端设置 mobile,pc端设为 pc,在调用 {@link login:password:loginParam: login} 接口时会把同一类型登录的其他终端踢下线。 */ @property (nonatomic, strong) NSString* __nonnull terminalType; /** * callserver接入方式 * - true: arc形式 * - false: endpoint形式 */ @property (nonatomic) bool directConnectEnable; @end /** * 全局基础类 * * 主要负责登录登出管理及账户属性存储 */ @interface JCClient : NSObject /** * 获取用户标识 * * 得到的的用户标识就是用户在调用 {@link login:password:loginParam: login} 方法时传入的 userId 参数
* 需要注意的是只有用户状态为登录中或已登录才能获取到值,其他状态将返回 nil */ @property (nonatomic, readonly, copy) NSString* __nullable userId; /** * 获取/设置自己的昵称 * * 在发起呼叫、加入频道时、发送消息时,都会将自己的昵称发送给其他用户 * * @note * - 每次调用 {@link create:callback:createParam: create} 初始化 SDK 后都需要重新设置 * - 不支持 IOT 设备 */ @property (nonatomic, copy) NSString* __nullable displayName; /** * 获取当前登录状态 * * - @ref JCClientStateNotInit : 未初始化 * - @ref JCClientStateIdle : 未登录 * - @ref JCClientStateLogining : 登录中 * - @ref JCClientStateLogined : 登录成功 * - @ref JCClientStateLogouting : 登出中 */ @property (nonatomic, readonly) JCClientState state; /** * 获取创建参数 * * 得到的创建参数就是用户在调用 {@link create:callback:createParam: create} 方法时传入的 createParam 参数
* 若用户在调用 {@link create:callback:createParam: create} 方法时,createParam 传入了 nil,则返回默认的 JCClientCreateParam 对象 */ @property (nonatomic, readonly) JCClientCreateParam* __nullable createParam; /** * 获取登录参数 * * 得到的登录参数就是用户在调用 {@link login:password:loginParam: login} 方法时传入的 loginParam 参数
* 若用户在调用 {@link login:password:loginParam: login} 方法时, loginParam 传入了 nil,则将返回默认的 JCClientLoginParam 对象
* 需要注意的是只有用户状态为登录中或已登录时才能获取到值,其他状态将返回 nil */ @property (nonatomic, readonly) JCClientLoginParam* __nullable loginParam; /** * 获取appkey * * 得到的appkey是由 {@link create:callback:createParam: create} 方法传入的 */ @property (nonatomic, readonly) NSString* __nonnull appkey; /// @cond Doxygen_All /** * 获取自己在服务器上的 uid */ @property (nonatomic, readonly) NSString* __nonnull serverUid; /// @endcond /** * 获取/设置登录服务器地址 * * 默认地址为 http:cn.router.justalkcloud.com:8080(国内环境)。如果是海外用户需要设置为 http:intl.router.justalkcloud.com:8080(国际环境)
* 该属性需要在调用登录方法 {@link login:password:loginParam: login} 之前进行设置。 */ @property (nonatomic, copy) NSString * __nonnull serverAddress; /** * 登入超时时间, 单位秒,默认60秒 */ @property (nonatomic, assign) int timeout; /** * arcChannel开关 */ @property (nonatomic, assign) bool arcChannel; /** * 创建 JCClient 对象 * * JCClient 的所有接口函数,如无特殊说明,都建议在主线程调用 * * @note * - 请确保在调用其他 API 前先调用该方法创建并初始化 JCClient 对象 * - 调用此方法创建 JCClient 对象后,期间没有调用过 {@link destroy} 方法销毁对象,然后又重复调用此方法,会直接返回第一次创建的 JCClient 对象 * * @param appKey 用户从 Juphoon Cloud 平台上申请的 AppKey 字符串。详见 [获取 appKey](https://developer.juphoon.com/cn/document/V2.1/create-application.php) * @param callback JCClientCallback 对象,用于回调相关通知 * @param createParam 创建参数,传入 nil 则按默认值创建,详见 JCClientCreateParam * @return JCClient 对象 * @exception "appKey、JCClientCallback 任意一个参数传空就会返回 nil" */ +(JCClient* __nullable)create:(NSString* __nonnull)appKey callback:(id __nonnull)callback createParam:(JCClientCreateParam* __nullable)createParam; /** * 销毁 JCClient 对象 * * 该方法为同步调用,需要等待 JCClient 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 SDK 的其它方法和回调。
* 此模块为基础模块,所以需要在销毁其他模块的对象后,再调用此方法来销毁 JCClient 对象。此外,我们 **不建议** 在 JCSDK 的回调中调用此方法销毁 JCClient 对象,否则会出现崩溃。
* 如需在销毁后再次创建 JCClient 实例,需要等待 @ref destroy 方法执行结束后再创建实例。 */ +(void)destroy; /** * 登录 Juphoon Cloud 平台 * * 只有登录成功后才能进行平台上的各种业务 * * @param userId 用户名,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 66 个字符): * - 26 个小写英文字母 a-z * - 26 个大写英文字母 A-Z * - 10 个数字 0-9 * - '+','-','_','.'。另外 '-','_','.' 这三个字符不能处于用户名的第一位 * @param password 密码,不能为 nil 或 "",长度不能超过 128 字符。免鉴权模式密码可以随意输入,Token 鉴权模式密码需要输入外部生成的 Token * @param loginParam 登录参数,一般不需要设置,如需设置请询问客服,传 nil 则按默认值,详见 JCClientLoginParam * @return 调用是否成功 * - true:正常执行调用流程,登录结果通过 {@link JCClientCallback#onLogin:reason: onLogin} 通知 * - false:调用异常,不会收到 {@link JCClientCallback#onLogin:reason: onLogin} 通知 */ -(bool)login:(NSString* __nonnull)userId password:(NSString* __nonnull)password loginParam:(JCClientLoginParam* __nullable)loginParam; /// @cond Doxygen_All /** * 重登录 * * 该接口在如果有其他同类型终端登录着则会登录失败,一般用于记住了账号后重启自动登录逻辑,登录结果通过 {@link JCClientCallback#onLogin:reason: onLogin} 通知 * * @note 与 @ref login 接口的区别: * - 同一设备类型登录同一账号,使用“登录”接口后,后登录的账号会把前面的账号踢下线 * - 同一设备类型登录同一账号,使用“重登录”接口后,后登录的账号会登录失败,上报已有账号登录错误 * - 同一账号不同设备类型,使用“登录”和“重登录”都能正常登录 * * @param userId 用户名 * @param password 密码,免鉴权模式密码可以随意输入,但不能为空 * @param loginParam 登录参数,传 nil 则按默认值,详见 JCClientLoginParam * @return 调用是否成功 * - true:正常执行调用流程,登录结果通过 {@link JCClientCallback#onLogin:reason: onLogin} 通知 * - false:调用异常,不会收到 {@link JCClientCallback#onLogin:reason: onLogin} 通知 */ -(bool)relogin:(NSString* __nonnull)userId password:(NSString* __nonnull)password loginParam:(JCClientLoginParam* __nullable)loginParam; /// @endcond /** * 登出 Juphoon Cloud 平台 * * 登出后不能进行平台上的各种业务 * * @return 调用是否成功 * - true:正常执行调用流程,登出结果通过 {@link JCClientCallback#onLogout: onLogout} 通知 * - false:调用失败,不会收到 {@link JCClientCallback#onLogout: onLogout} 通知 */ -(bool)logout; /** * 发送在线消息 * * 消息发送结果通过 @ref JCClientCallback#onOnlineMessageSendResult "onOnlineMessageSendResult" 通知 * * @note * - 当前对方只有在线才能收到此消息 * - 此接口调用频次限制 100次/分钟 * * @param userId 对方的 userId * @param content 要发送的消息内容 * @return * - >0:成功返回操作id,与回调中的 operationId 一致 * - -1:失败,不会触发消息发送结果回调 */ -(int)sendOnlineMessage:(NSString* __nonnull)userId content:(NSString* __nonnull)content; @end /** * @} */