Skip to content

Commit 91fc8f5

Browse files
author
Jasper
committed
【优化】第三方登录优化
1 parent 13846b9 commit 91fc8f5

21 files changed

+582
-190
lines changed

CYUtilProject/CYCache/CYPersistenceCache.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ - (NSDate *)fileLastReadDate:(NSString *)filePath {
165165
const char *attrName = [fileLastReadDateAttributeKey UTF8String];
166166

167167
// get size of needed buffer
168-
int bufferLength = getxattr(filePathC,
168+
size_t bufferLength = getxattr(filePathC,
169169
attrName,
170170
NULL,
171171
0,

CYUtilProject/CYShareSDK/CYShare+Login.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,29 @@
2828

2929
#if CY_WECHAT_ENABLED && CY_WECHAT_LOGIN_ENABLED
3030

31+
/**
32+
* 微信登陆,以snsapi_userinfo权限登录,不获取AccessToken,以登录成功的微信Code返回
33+
*/
34+
+ (BOOL)loginByWechatWithCodeCallback:(CYWechatLoginCodeCallback)codeCallback;
35+
36+
/**
37+
* 微信登陆,开发者指定登录权限,具体权限请参考微信开放平台文档
38+
* 可以指定是否获取AccessToken
39+
*/
40+
+ (BOOL)loginByWechatWithPermissions:(NSArray<NSString *> *)permissions
41+
fromViewController:(UIViewController *)viewController
42+
codeCallback:(CYWechatLoginCodeCallback)codeCallback
43+
shouldGetAccessToken:(BOOL)shouldGetAccessToken
44+
accessTokenCallback:(CYLoginCallback)accessTokenCallback;
45+
3146
/**
3247
* 微信登陆,以snsapi_userinfo权限登录
48+
* 获取AccessToken后回调
3349
*/
3450
+ (BOOL)loginByWechat:(CYLoginCallback)callback;
3551
/**
3652
* 微信登陆,开发者指定登录权限,具体权限请参考微信开放平台文档
53+
* 获取AccessToken后回调
3754
*/
3855
+ (BOOL)loginByWechat:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback;
3956

CYUtilProject/CYShareSDK/CYShare+Login.m

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,22 @@
1111
@implementation CYShare (Login)
1212

1313
#if CY_WECHAT_ENABLED && CY_WECHAT_LOGIN_ENABLED
14+
+ (BOOL)loginByWechatWithCodeCallback:(CYWechatLoginCodeCallback)codeCallback {
15+
return [[CYWechat sharedInstance] loginWithCodeCallback:codeCallback];
16+
}
17+
18+
+ (BOOL)loginByWechatWithPermissions:(NSArray<NSString *> *)permissions
19+
fromViewController:(UIViewController *)viewController
20+
codeCallback:(CYWechatLoginCodeCallback)codeCallback
21+
shouldGetAccessToken:(BOOL)shouldGetAccessToken
22+
accessTokenCallback:(CYLoginCallback)accessTokenCallback {
23+
return [[CYWechat sharedInstance] loginWithPermissions:permissions
24+
fromViewController:viewController
25+
codeCallback:codeCallback
26+
shouldGetAccessToken:shouldGetAccessToken
27+
accessTokenCallback:accessTokenCallback];
28+
}
29+
1430
+ (BOOL)loginByWechat:(CYLoginCallback)callback {
1531
return [[CYWechat sharedInstance] loginWithCallback:callback];
1632
}

CYUtilProject/CYShareSDK/CYShare.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,11 @@
121121
目前暂不支持图片分享
122122
123123
*/
124-
+ (void)shareBySMS:(CYShareModel *)model to:(NSArray *)mobiles fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback;
124+
+ (void)shareBySMS:(CYShareModel *)model toMobiles:(NSArray *)mobiles fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback;
125125

126-
+ (BOOL)canSendText;
126+
+ (void)shareBySMS:(CYShareModel *)model to:(NSString *)mobile fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback;
127+
128+
+ (BOOL)canSendSMSText;
127129

128130
#endif
129131

CYUtilProject/CYShareSDK/CYShare.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,15 @@ + (void)shareByAppleActivity:(CYShareModel *)model fromViewController:(UIViewCon
108108

109109
#if CY_SHARE_SMS_ENABLED
110110

111-
+ (void)shareBySMS:(CYShareModel *)model to:(NSArray *)mobiles fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback {
111+
+ (void)shareBySMS:(CYShareModel *)model toMobiles:(NSArray *)mobiles fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback {
112112
[[CYSMS sharedInstance] share:model toMobiles:mobiles fromViewController:viewController callback:callback];
113113
}
114114

115-
+ (BOOL)canSendText {
115+
+ (void)shareBySMS:(CYShareModel *)model to:(NSString *)mobile fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback {
116+
[[CYSMS sharedInstance] share:model to:mobile fromViewController:viewController callback:callback];
117+
}
118+
119+
+ (BOOL)canSendSMSText {
116120
return [CYSMS canSendText];
117121
}
118122

CYUtilProject/CYShareSDK/CustomShare/CYAppleActivity.m

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@ - (void)share:(CYShareModel *)model fromViewController:(UIViewController *)viewC
2424

2525
if (!model.isValid) {
2626
if (callback) {
27-
callback(-1, @"The share model is invalid!!!");
27+
NSError *error = [NSError errorWithDomain:CYShareErrorDomain
28+
code:CYShareErrorCodeInvalidParams
29+
userInfo:@{ @"msg": NSLocalizedString(@"参数错误", nil) }];
30+
callback(error);
2831
}
2932
return;
3033
}
@@ -59,7 +62,13 @@ - (void)share:(CYShareModel *)model fromViewController:(UIViewController *)viewC
5962
applicationActivities:nil];
6063
[shareController setCompletionWithItemsHandler:^(UIActivityType _Nullable activityType, BOOL completed, NSArray * _Nullable returnedItems, NSError * _Nullable activityError) {
6164
if (callback) {
62-
callback(activityError.code, [activityError.userInfo description]);
65+
NSError *error = nil;
66+
if (activityError) {
67+
error = [NSError errorWithDomain:CYShareErrorDomain
68+
code:CYShareErrorCodeCommon
69+
userInfo:@{ @"msg": NSLocalizedString(@"分享失败", nil), @"sourceError": activityError }];
70+
}
71+
callback(error);
6372
}
6473
}];
6574
[viewController presentViewController:shareController animated:YES completion:nil];

CYUtilProject/CYShareSDK/CustomShare/CYBaseShare+Login.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,8 @@
1212

1313
@class UIViewController;
1414

15-
typedef void (^CYLoginCallback)(NSInteger code,
16-
NSString *msg,
17-
CYLoginInfo *loginInfo);
18-
typedef void (^CYGetUserInfoCallback)(NSInteger code,
19-
NSString *msg,
20-
CYUserInfo *userInfo);
15+
typedef void (^CYLoginCallback)(CYLoginInfo *loginInfo, NSError *error);
16+
typedef void (^CYGetUserInfoCallback)(CYUserInfo *userInfo, NSError *error);
2117

2218
@interface CYBaseShare (Login)
2319

CYUtilProject/CYShareSDK/CustomShare/CYBaseShare.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,20 @@
1212
@class UIApplication;
1313
@class UIViewController;
1414

15-
typedef void (^CYShareCallback)(NSInteger code,
16-
NSString *msg);
15+
typedef NS_ENUM(NSInteger, CYShareErrorCode) {
16+
CYShareErrorCodeSuccess = 0, // 成功
17+
CYShareErrorCodeCommon = -1, // 普通错误类型
18+
CYShareErrorCodeUserCancel = -2, // 用户取消
19+
CYShareErrorCodeSentFail = -3, // 发送失败
20+
CYShareErrorCodeAuthDeny = -4, // 授权失败
21+
CYShareErrorCodeUnsupport = -5, // 不支持
22+
CYShareErrorCodeInvalidParams = -6, // 参数错误
23+
CYShareErrorCodeOpenAppFailed = -7, // 打开第三方app失败
24+
};
25+
26+
extern NSString *CYShareErrorDomain;
27+
28+
typedef void (^CYShareCallback)(NSError *error);
1729

1830
@interface CYBaseShare : NSObject
1931

CYUtilProject/CYShareSDK/CustomShare/CYBaseShare.m

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
#import "CYBaseShare.h"
1010
#import <UIKit/UIKit.h>
1111

12+
NSString *CYShareErrorDomain = @"CYShare.Error.CommonDomain";
13+
1214
@implementation CYBaseShare
1315

1416
#pragma mark - app info
@@ -27,12 +29,11 @@ - (void)registerRedirectURI:(NSString *)redirectURI {
2729
#pragma mark - share
2830
- (void)share:(CYShareModel *)model
2931
callback:(CYShareCallback)callback {
30-
31-
self.shareCallback = callback;
32+
3233
}
3334

3435
- (void)share:(CYShareModel *)model fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback {
35-
self.shareCallback = callback;
36+
3637
}
3738

3839
#pragma mark - handle open url

CYUtilProject/CYShareSDK/CustomShare/CYFacebook+Login.m

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -110,24 +110,23 @@ - (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions
110110
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
111111
dispatch_async(dispatch_get_main_queue(), ^{
112112

113-
NSInteger statusCode = 0;
114-
NSString *msg = nil;
115113
CYLoginInfo *loginInfo = nil;
114+
NSError *error1 = nil;
116115
if (error) {
117-
statusCode = error.code;
118-
msg = error.localizedDescription;
116+
error1 = [NSError errorWithDomain:CYShareErrorDomain
117+
code:CYShareErrorCodeCommon
118+
userInfo:@{ @"msg": NSLocalizedString(@"登录失败", nil), @"sourceError": error ? : @"" }];
119119
} else if (result.isCancelled) {
120-
statusCode = -1;
121-
msg = NSLocalizedString(@"Cancelled", nil);
120+
error1 = [NSError errorWithDomain:CYShareErrorDomain
121+
code:CYShareErrorCodeUserCancel
122+
userInfo:@{ @"msg": NSLocalizedString(@"用户取消", nil), @"sourceError": error ? : @"" }];
122123
} else {
123-
statusCode = 0;
124-
msg = NSLocalizedString(@"Success", nil);
125124
loginInfo = [[CYLoginInfo alloc] init];
126125
loginInfo.fbSDKAccessToken = result.token;
127126
self.loginInfo = loginInfo;
128127
}
129128
if (callback) {
130-
callback(statusCode, msg, loginInfo);
129+
callback(loginInfo, error1);
131130
}
132131
});
133132
}];
@@ -142,17 +141,19 @@ - (BOOL)getUserInfo:(NSString *)userId callback:(CYGetUserInfoCallback)callback
142141
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"/%@?fields=id,name,email,first_name,last_name,short_name,gender", userId] parameters:nil HTTPMethod:@"GET"];
143142
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
144143

145-
NSInteger statusCode = error.code;
146-
NSString *msg = [error localizedDescription];
147144
CYUserInfo *userInfo = nil;
145+
NSError *error1 = nil;
148146
if (result) {
149-
statusCode = 0;
150147
userInfo = [[CYUserInfo alloc] init];
151148
userInfo.facebookUserInfo = result;
152149
self.userInfo = userInfo;
150+
} else {
151+
error1 = [NSError errorWithDomain:CYShareErrorDomain
152+
code:CYShareErrorCodeCommon
153+
userInfo:@{ @"msg": NSLocalizedString(@"获取用户信息失败", nil), @"sourceError": error ? : @"" }];
153154
}
154155
if (callback) {
155-
callback(statusCode, msg, userInfo);
156+
callback(userInfo, error1);
156157
}
157158
}];
158159
return YES;

CYUtilProject/CYShareSDK/CustomShare/CYFacebook.m

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,18 @@ - (void)share:(CYShareModel *)model
3333
- (void)share:(CYShareModel *)model fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback {
3434
if (!model.isValid) {
3535
if (callback) {
36-
callback(-1, @"The share model is invalid!!!");
36+
NSError *error = [NSError errorWithDomain:CYShareErrorDomain
37+
code:CYShareErrorCodeInvalidParams
38+
userInfo:@{ @"msg": NSLocalizedString(@"参数错误", nil) }];
39+
callback(error);
3740
}
3841
return ;
3942
} else if (model.type == CYShareContenTypeText) {
4043
if (callback) {
41-
callback(-2, @"Facebook cannot share text only!!!");
44+
NSError *error = [NSError errorWithDomain:CYShareErrorDomain
45+
code:CYShareErrorCodeInvalidParams
46+
userInfo:@{ @"msg": NSLocalizedString(@"Facebook不支持仅分享文本", nil) }];
47+
callback(error);
4248
}
4349
return ;
4450
}
@@ -83,7 +89,10 @@ - (void)share:(CYShareModel *)model fromViewController:(UIViewController *)viewC
8389
- (void)shareImages:(NSArray *)models fromViewController:(UIViewController *)viewController callback:(CYShareCallback)callback {
8490
if (models.count == 0) {
8591
if (callback) {
86-
callback(-1, @"The models cannot be empty");
92+
NSError *error = [NSError errorWithDomain:CYShareErrorDomain
93+
code:CYShareErrorCodeInvalidParams
94+
userInfo:@{ @"msg": NSLocalizedString(@"参数为空", nil) }];
95+
callback(error);
8796
}
8897
return;
8998
}
@@ -115,21 +124,27 @@ - (void)shareImages:(NSArray *)models fromViewController:(UIViewController *)vie
115124
#pragma mark - FBSDKSharingDelegate
116125
- (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results {
117126
if (self.shareCallback) {
118-
self.shareCallback(0, NSLocalizedString(@"Success", nil));
127+
self.shareCallback(nil);
119128
self.shareCallback = nil;
120129
}
121130
}
122131

123132
- (void)sharer:(id<FBSDKSharing>)sharer didFailWithError:(NSError *)error {
124133
if (self.shareCallback) {
125-
self.shareCallback(error.code, error.localizedDescription);
134+
NSError *error1 = [NSError errorWithDomain:CYShareErrorDomain
135+
code:CYShareErrorCodeCommon
136+
userInfo:@{ @"msg": NSLocalizedString(@"分享失败", nil), @"sourceError": error ? : @"" }];
137+
self.shareCallback(error1);
126138
self.shareCallback = nil;
127139
}
128140
}
129141

130142
- (void)sharerDidCancel:(id<FBSDKSharing>)sharer {
131143
if (self.shareCallback) {
132-
self.shareCallback(-1, NSLocalizedString(@"Cancelled", nil));
144+
NSError *error = [NSError errorWithDomain:CYShareErrorDomain
145+
code:CYShareErrorCodeUserCancel
146+
userInfo:@{ @"msg": NSLocalizedString(@"用户取消", nil) }];
147+
self.shareCallback(error);
133148
self.shareCallback = nil;
134149
}
135150
}

CYUtilProject/CYShareSDK/CustomShare/CYQQ+Login.m

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,15 +101,19 @@ - (BOOL)getUserInfoWithCallback:(CYGetUserInfoCallback)callback {
101101

102102
- (void)getUserInfoResponse:(APIResponse *)response {
103103
NSInteger code = response.retCode;
104-
NSString *msg = response.errorMsg;
105104
CYUserInfo *userInfo = nil;
105+
NSError *error = nil;
106106
if (code == URLREQUEST_SUCCEED) {
107107
userInfo = [[CYUserInfo alloc] init];
108108
userInfo.qqUserInfo = response.jsonResponse;
109109
self.userInfo = userInfo;
110+
} else {
111+
error = [NSError errorWithDomain:CYShareErrorDomain
112+
code:CYShareErrorCodeCommon
113+
userInfo:@{ @"msg": NSLocalizedString(@"获取用户信息失败", nil), @"sourceError": response.errorMsg ? : @"" }];
110114
}
111115
if (self.userInfoCallback) {
112-
self.userInfoCallback(code, msg, userInfo);
116+
self.userInfoCallback(userInfo, error);
113117
self.userInfoCallback = nil;
114118
}
115119
}

0 commit comments

Comments
 (0)