You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

286 lines
10 KiB

//
// JCClient.h
// JCSDK-OC
//
// Created by maikireton on 2017/8/10.
// Copyright © 2017年 juphoon. All rights reserved.
//
#import <Foundation/Foundation.h>
#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 参数<br>
* 需要注意的是只有用户状态为登录中或已登录才能获取到值,其他状态将返回 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 参数<br>
* 若用户在调用 {@link create:callback:createParam: create} 方法时,createParam 传入了 nil,则返回默认的 JCClientCreateParam 对象
*/
@property (nonatomic, readonly) JCClientCreateParam* __nullable createParam;
/**
* 获取登录参数
*
* 得到的登录参数就是用户在调用 {@link login:password:loginParam: login} 方法时传入的 loginParam 参数<br>
* 若用户在调用 {@link login:password:loginParam: login} 方法时, loginParam 传入了 nil,则将返回默认的 JCClientLoginParam 对象<br>
* 需要注意的是只有用户状态为登录中或已登录时才能获取到值,其他状态将返回 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:<span><span/>cn.router.justalkcloud.com:8080(国内环境)。如果是海外用户需要设置为 http:<span><span/>intl.router.justalkcloud.com:8080(国际环境)<br>
* 该属性需要在调用登录方法 {@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<JCClientCallback> __nonnull)callback createParam:(JCClientCreateParam* __nullable)createParam;
/**
* 销毁 JCClient 对象
*
* 该方法为同步调用,需要等待 JCClient 实例资源释放后才能执行其他操作,调用此方法后,你将无法再使用 SDK 的其它方法和回调。<br>
* 此模块为基础模块,所以需要在销毁其他模块的对象后,再调用此方法来销毁 JCClient 对象。此外,我们 **不建议** 在 JCSDK 的回调中调用此方法销毁 JCClient 对象,否则会出现崩溃。<br>
* 如需在销毁后再次创建 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
* - &gt;0:成功返回操作id,与回调中的 operationId 一致
* - -1:失败,不会触发消息发送结果回调
*/
-(int)sendOnlineMessage:(NSString* __nonnull)userId content:(NSString* __nonnull)content;
@end
/**
* @}
*/