lpw
2022-03-14 7acec95dedc4b1175a8d1fc5a123f5d381d276f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
///
/// \file sdkdef.h
/// \brief SDK中相关常量定义
///
/// Created by Tencent on 12-12-25.
/// Copyright (c) 2012年 Tencent. All rights reserved.
///
 
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
 
/**
 * \brief 设置sdk的log等级
 */
typedef enum {
    TCOLogLevel_Disabled = -1,   // 关闭所有log
    TCOLogLevel_Error = 0,
    TCOLogLevel_Warning,
    TCOLogLevel_Info,
    TCOLogLevel_Debug,
} TCOLogLevel;
 
/**
 * \breif 授权/分享 方式
 */
typedef enum TencentAuthShareType {
    AuthShareType_QQ,
    AuthShareType_TIM,
}TencentAuthShareType;
 
/**
 * \brief APIResponse.retCode可能的枚举常量
 */
typedef enum
{
    URLREQUEST_SUCCEED = 0, /**< 网络请求成功发送至服务器,并且服务器返回数据格式正确
                             * \note 这里包括所请求业务操作失败的情况,例如没有授权等原因导致
                             */
    
    URLREQUEST_FAILED = 1,  /**< 网络异常,或服务器返回的数据格式不正确导致无法解析 */
} REPONSE_RESULT;
 
/**
 * \brief 增量授权失败原因
 *
 * \note 增量授权失败不影响原token的有效性(原token已失效的情况除外)
 */
typedef enum
{
    kUpdateFailUnknown = 1,  ///< 未知原因
    kUpdateFailUserCancel,   ///< 用户取消
    kUpdateFailNetwork,      ///< 网络问题
} UpdateFailType;
 
/**
 * \brief 封装服务器返回的结果
 *
 * APIResponse用于封装所有请求的返回结果,包括错误码、错误信息、原始返回数据以及返回数据的json格式字典
 */
@interface APIResponse : NSObject<NSSecureCoding> {
    int      _detailRetCode;
    int         _retCode;
    int         _seq;
    NSString *_errorMsg;
    NSDictionary *_jsonResponse;
    NSString *_message;
    id       _userData;
}
 
/**
 * 新增的详细错误码\n
 * detailRetCode主要用于区分不同的错误情况,参见\ref OpenSDKError
 */
@property (nonatomic, assign) int detailRetCode;
 
/**
 * 网络请求是否成功送达服务器,以及服务器返回的数据格式是否正确\n
 * retCode具体取值可参考\ref REPONSE_RESULT
 */
@property (nonatomic, assign) int retCode;
 
/**
 * 网络请求对应的递增序列号,方便内部管理
 */
@property (nonatomic, assign) int seq;
 
/**
 * 错误提示语
 */
@property (nonatomic, retain) NSString *errorMsg;
 
/**
 * 服务器返回数据的json格式字典\n
 * 字典内具体参数的命名和含义请参考\ref api_spec
 */
@property (nonatomic, retain) NSDictionary *jsonResponse;
 
/**
 * 服务器返回的原始数据字符串
 */
@property (nonatomic, retain) NSString *message;
 
/**
 * 用户保留数据
 */
@property (nonatomic, retain) id userData;
 
@end
 
 
/**
 * 用户自定义的保留字段
 */
FOUNDATION_EXTERN NSString * const PARAM_USER_DATA;
 
/**
 * \name 应用邀请参数字段定义
 */
///@{
 
/** 应用邀请展示图片url的key */
FOUNDATION_EXTERN NSString * const PARAM_APP_ICON;
 
/** 应用邀请描述文本的key */
FOUNDATION_EXTERN NSString * const PARAM_APP_DESC;
 
/** 应用邀请好友列表的key */
FOUNDATION_EXTERN NSString * const PARAM_APP_INVITED_OPENIDS;
 
///@}
 
/**
 * \name sendStory新分享参数字段定义
 */
///@{
 
/** 预填入接受人列表的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_RECEIVER;
 
/** 分享feeds标题的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_TITLE;
 
/** 分享feeds评论内容的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_COMMENT;
 
/** 分享feeds摘要的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_SUMMARY;
 
/** 分享feeds展示图片url的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_IMAGE;
 
/** 分享feeds跳转链接url的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_URL;
 
/** 分享feeds点击操作默认行为的key */
FOUNDATION_EXTERN NSString * const PARAM_SENDSTORY_ACT;
 
///@}
 
/**
 * \name 设置头像参数字段定义
 */
///@{
 
/** 头像图片数据的key */
FOUNDATION_EXTERN NSString * const PARAM_SETUSERHEAD_PIC;
 
/** 头像图片文件名的key */
FOUNDATION_EXTERN NSString * const PARAM_SETUSERHEAD_FILENAME;
 
///@}
 
/**
 * \name 服务器返回数据的参数字段定义
 */
///@{
 
/** 服务器返回码的key */
FOUNDATION_EXTERN NSString * const PARAM_RETCODE;
 
/** 服务器返回错误信息的key */
FOUNDATION_EXTERN NSString * const PARAM_MESSAGE;
 
/** 服务器返回额外数据的key */
FOUNDATION_EXTERN NSString * const PARAM_DATA;
 
///@}
 
/**
 * \name 错误信息相关常量定义
 */
///@{
 
/** 详细错误信息字典中额外信息的key */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorKeyExtraInfo;
 
/** 详细错误信息字典中返回码的key */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorKeyRetCode;
 
/** 详细错误信息字典中错误语句的key */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorKeyMsg;
 
/** 不支持的接口 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUnsupportedAPI;
 
/** 操作成功 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgSuccess;
 
/** 未知错误 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUnknown;
 
/** 用户取消 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUserCancel;
 
/** 请重新登录 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgReLogin;
 
/** 应用没有操作权限 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgOperationDeny;
 
/** 网络异常或没有网络 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgNetwork;
 
/** URL格式或协议错误 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgURL;
 
/** 解析数据出错 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgDataParse;
 
/** 传入参数有误 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgParam;
 
/** 连接超时 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgTimeout;
 
/** 安全问题 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgSecurity;
 
/** 文件读写错误 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgIO;
 
/** 服务器端错误 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgServer;
 
/** 页面错误 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgWebPage;
 
/** 设置头像图片过大 */
FOUNDATION_EXTERN NSString * const TCOpenSDKErrorMsgUserHeadPicLarge;
 
/** 用户未同意授权隐私协议 */
FOUNDATION_EXPORT NSString * const TCOpenSDKErrorMsgUserNotAgreedAuthorization;
 
///@}
 
/**
 * \brief SDK新增详细错误常量
 */
typedef enum
{
    kOpenSDKInvalid = -1,                       ///< 无效的错误码
    kOpenSDKErrorUnsupportedAPI = -2,                ///< 不支持的接口
    
    /**
     * \name CommonErrorCode
     * 公共错误码
     */
    ///@{
    kOpenSDKErrorSuccess = 0,                   ///< 成功
    kOpenSDKErrorUnknown,                       ///< 未知错误
    kOpenSDKErrorUserCancel,                    ///< 用户取消
    kOpenSDKErrorReLogin,                       ///< token无效或用户未授权相应权限需要重新登录
    kOpenSDKErrorOperationDeny,                 ///< 第三方应用没有该api操作的权限
    ///@}
    
    /**
     * \name NetworkRelatedErrorCode
     * 网络相关错误码
     */
    ///@{
    kOpenSDKErrorNetwork,                       ///< 网络错误,网络不通或连接不到服务器
    kOpenSDKErrorURL,                           ///< URL格式或协议错误
    kOpenSDKErrorDataParse,                     ///< 数据解析错误,服务器返回的数据解析出错
    kOpenSDKErrorParam,                         ///< 传入参数错误
    kOpenSDKErrorConnTimeout,                   ///< http连接超时
    kOpenSDKErrorSecurity,                      ///< 安全问题
    kOpenSDKErrorIO,                            ///< 下载和文件IO错误
    kOpenSDKErrorServer,                        ///< 服务器端错误
    ///@}
    
    /**
     * \name WebViewRelatedError
     * webview特有错误
     */
    ///@{
    kOpenSDKErrorWebPage,                       ///< 页面错误
    ///@}
    
    /**
     * \name SetUserHeadRelatedErrorCode
     * 设置头像自定义错误码段
     */
    ///@{
    kOpenSDKErrorUserHeadPicLarge = 0x010000,   ///< 图片过大 设置头像自定义错误码
    ///@}
} OpenSDKError;
 
/**
 * \name SDK版本(v1.3)支持的授权列表常量
 */
///@{
 
/** 发表一条说说到QQ空间(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_TOPIC;
 
/** 创建一个QQ空间相册(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ALBUM;
 
/** 上传一张照片到QQ空间相册(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_UPLOAD_PIC;
 
/** 获取用户QQ空间相册列表(<b>需要申请权限</b>) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_LIST_ALBUM;
 
/** 验证是否认证空间粉丝 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_CHECK_PAGE_FANS;
 
/** 获取登录用户自己的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INFO;
 
/** 获取其他用户的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_OTHER_INFO;
 
/** 获取会员用户基本信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_INFO;
 
/** 获取会员用户详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_RICH_INFO;
 
/** 获取用户信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_USER_INFO;
 
/** 移动端获取用户信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_SIMPLE_USER_INFO;
///@}
 
 
/**
 * \name CGI接口相关参数类型定义
 */
 
/** 必填的字符串类型参数 */
typedef NSString *TCRequiredStr;
 
/** 必填的UIImage类型参数 */
typedef UIImage *TCRequiredImage;
 
/** 必填的整型参数 */
typedef NSInteger TCRequiredInt;
 
/** 必填的数字类型 */
typedef NSNumber *TCRequiredNumber;
 
/** 必填的NSData参数 */
typedef NSData *TCRequiredData;
 
/** 可选的字符串类型参数 */
typedef NSString *TCOptionalStr;
 
/** 可选的UIImage类型参数 */
typedef UIImage *TCOptionalImage;
 
/** 可选的整型参数 */
typedef NSInteger TCOptionalInt;
 
/** 可选的数字类型 */
typedef NSNumber *TCOptionalNumber;
 
/** 可选的不定类型参数 */
typedef id TCRequiredId;
///@}
 
 
/**
 * \brief CGI请求的参数字典封装辅助基类
 *
 * 将相应属性的值以key-value的形式保存到参数字典中
 */
@interface TCAPIRequest : NSMutableDictionary
 
/** CGI请求的URL地址 */
@property (nonatomic, readonly) NSURL *apiURL;
 
/** CGI请求方式:"GET","POST" */
@property (nonatomic, readonly) NSString *method;
 
/**
 * API参数中的保留字段,可以塞入任意字典支持的类型,再调用完成后会带回给调用方
 */
@property (nonatomic, retain) TCRequiredId paramUserData;
 
/**
 * APIResponse,API的返回结果
 */
@property (nonatomic, readonly) APIResponse *response;
 
/** 取消相应的CGI请求任务 */
- (void)cancel;
 
@end
 
@protocol TCAPIRequestDelegate <NSObject>
@optional
- (void)cgiRequest:(TCAPIRequest *)request didResponse:(APIResponse *)response;
 
@end