Skip to content

Commit 1f14984

Browse files
author
Jasper
committed
增加测试第三方登录,部分功能优化
1 parent 36863ad commit 1f14984

19 files changed

+557
-59
lines changed

CYUtilProject/CYShareSDK/CYShare+Login.h

+54-6
Original file line numberDiff line numberDiff line change
@@ -8,28 +8,76 @@
88

99
#import "CYShare.h"
1010

11-
#if CY_WECHAT_ENABLED
11+
#if CY_WECHAT_ENABLED && CY_WECHAT_LOGIN_ENABLED
1212
#import "CYWechat+Login.h"
1313
#endif
1414

15-
#if CY_QQ_ENABLED
15+
#if CY_QQ_ENABLED && CY_QQ_LOGIN_ENABLED
1616
#import "CYQQ+Login.h"
1717
#endif
1818

19-
#if CY_SINA_WEIBO_ENABLED
19+
#if CY_SINA_WEIBO_ENABLED && CY_SINA_WEIBO_LOGIN_ENABLED
2020
#import "CYSinaWeibo+Login.h"
2121
#endif
2222

23-
#if CY_FACEBOOK_ENABLED
23+
#if CY_FACEBOOK_ENABLED && CY_FACEBOOK_LOGIN_ENABLED
2424
#import "CYFacebook+Login.h"
2525
#endif
2626

2727
@interface CYShare (Login)
2828

29-
#if CY_WECHAT_ENABLED
29+
#if CY_WECHAT_ENABLED && CY_WECHAT_LOGIN_ENABLED
3030

31+
/**
32+
* 微信登陆,以snsapi_userinfo权限登录
33+
*/
34+
+ (BOOL)loginByWechat:(CYLoginCallback)callback;
35+
/**
36+
* 微信登陆,开发者指定登录权限,具体权限请参考微信开放平台文档
37+
*/
3138
+ (BOOL)loginByWechat:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback;
32-
+ (BOOL)loginByWechat:(NSArray<NSString *> *)permissions fromViewController:(UIViewController *)viewController callback:(CYLoginCallback)callback;
39+
40+
#endif
41+
42+
#if CY_QQ_ENABLED && CY_QQ_LOGIN_ENABLED
43+
44+
/**
45+
* qq登陆,以kOPEN_PERMISSION_GET_SIMPLE_USER_INFO权限登录
46+
*/
47+
+ (BOOL)loginByQQ:(CYLoginCallback)callback;
48+
/**
49+
* qq登陆,具体权限请参考QQSDK中的sdkdef.h
50+
*/
51+
+ (BOOL)loginByQQ:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback;
52+
53+
#endif
54+
55+
#if CY_SINA_WEIBO_ENABLED && CY_SINA_WEIBO_LOGIN_ENABLED
56+
57+
/**
58+
* 微博登陆,以all权限登录
59+
*/
60+
+ (BOOL)loginBySinaWeibo:(CYLoginCallback)callback;
61+
62+
/**
63+
* 微博登录,具体权限请参考微博开放平台
64+
*/
65+
+ (BOOL)loginBySinaWeibo:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback;
66+
67+
#endif
68+
69+
#if CY_FACEBOOK_ENABLED && CY_FACEBOOK_LOGIN_ENABLED
70+
71+
/**
72+
* facebook登陆,以默认权限登录
73+
*/
74+
+ (BOOL)loginByFacebook:(CYLoginCallback)callback;
75+
/**
76+
* facebook登录,可以支持应用内弹窗登录
77+
*/
78+
+ (BOOL)loginByFacebook:(NSArray<NSString *> *)permissions
79+
fromViewController:(UIViewController *)viewController
80+
callback:(CYLoginCallback)callback;
3381

3482
#endif
3583

CYUtilProject/CYShareSDK/CYShare+Login.m

+52-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010

1111
@implementation CYShare (Login)
1212

13-
#if CY_WECHAT_ENABLED
13+
#if CY_WECHAT_ENABLED && CY_WECHAT_LOGIN_ENABLED
14+
+ (BOOL)loginByWechat:(CYLoginCallback)callback {
15+
return [[CYWechat sharedInstance] loginWithCallback:callback];
16+
}
1417

1518
+ (BOOL)loginByWechat:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback {
1619
return [[CYWechat sharedInstance] loginWithPermissions:permissions callback:callback];
@@ -22,4 +25,52 @@ + (BOOL)loginByWechat:(NSArray<NSString *> *)permissions fromViewController:(UIV
2225

2326
#endif
2427

28+
#if CY_QQ_ENABLED && CY_QQ_LOGIN_ENABLED
29+
30+
+ (BOOL)loginByQQ:(CYLoginCallback)callback {
31+
return [[CYQQ sharedInstance] loginWithCallback:callback];
32+
}
33+
34+
+ (BOOL)loginByQQ:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback {
35+
return [[CYQQ sharedInstance] loginWithPermissions:permissions callback:callback];
36+
}
37+
38+
+ (BOOL)loginByQQ:(NSArray<NSString *> *)permissions fromViewController:(UIViewController *)viewController callback:(CYLoginCallback)callback {
39+
return [[CYQQ sharedInstance] loginWithPermissions:permissions fromViewController:viewController callback:callback];
40+
}
41+
42+
#endif
43+
44+
#if CY_SINA_WEIBO_ENABLED && CY_SINA_WEIBO_LOGIN_ENABLED
45+
46+
+ (BOOL)loginBySinaWeibo:(CYLoginCallback)callback {
47+
return [[CYSinaWeibo sharedInstance] loginWithCallback:callback];
48+
}
49+
50+
+ (BOOL)loginBySinaWeibo:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback {
51+
return [[CYSinaWeibo sharedInstance] loginWithPermissions:permissions callback:callback];
52+
}
53+
54+
+ (BOOL)loginBySinaWeibo:(NSArray<NSString *> *)permissions fromViewController:(UIViewController *)viewController callback:(CYLoginCallback)callback {
55+
return [[CYSinaWeibo sharedInstance] loginWithPermissions:permissions fromViewController:viewController callback:callback];
56+
}
57+
58+
#endif
59+
60+
#if CY_FACEBOOK_ENABLED && CY_FACEBOOK_LOGIN_ENABLED
61+
62+
+ (BOOL)loginByFacebook:(CYLoginCallback)callback {
63+
return [[CYFacebook sharedInstance] loginWithCallback:callback];
64+
}
65+
66+
+ (BOOL)loginByFacebook:(NSArray<NSString *>*)permissions callback:(CYLoginCallback)callback {
67+
return [[CYFacebook sharedInstance] loginWithPermissions:permissions callback:callback];
68+
}
69+
70+
+ (BOOL)loginByFacebook:(NSArray<NSString *> *)permissions fromViewController:(UIViewController *)viewController callback:(CYLoginCallback)callback {
71+
return [[CYFacebook sharedInstance] loginWithPermissions:permissions fromViewController:viewController callback:callback];
72+
}
73+
74+
#endif
75+
2576
@end

CYUtilProject/CYShareSDK/CustomShare/CYBaseShare+Login.h

+10-1
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,17 @@ typedef void (^CYGetUserInfoCallback)(NSInteger code,
3333

3434
/**
3535
* 登录接口,默认返回NO,标识登录接口调用失败
36+
* 使用默认权限登录,微信默认权限snsapi_userinfo, qq默认权限kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,微博默认权限all,facebook默认权限
3637
*
37-
* @param permissions 登录需要获取的权限列表
38+
* @param callback 登录回调,当登录接口调用失败时,不会回调
39+
*
40+
*/
41+
- (BOOL)loginWithCallback:(CYLoginCallback)callback;
42+
43+
/**
44+
* 登录接口,默认返回NO,标识登录接口调用失败
45+
*
46+
* @param permissions 登录需要获取的权限列表,权限列表
3847
* @param callback 登录回调,当登录接口调用失败时,不会回调
3948
*
4049
*/

CYUtilProject/CYShareSDK/CustomShare/CYBaseShare+Login.m

+4
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ - (CYUserInfo *)userInfo {
7171
}
7272

7373
#pragma mark - login action
74+
- (BOOL)loginWithCallback:(CYLoginCallback)callback {
75+
return NO;
76+
}
77+
7478
- (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions
7579
callback:(CYLoginCallback)callback {
7680
return NO;

CYUtilProject/CYShareSDK/CustomShare/CYFacebook+Login.h

+9-1
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,20 @@
2222

2323
@end
2424

25+
/**
26+
* 增加facebook返回的用户详细信息
27+
*/
28+
@interface CYUserInfo (Facebook)
2529

30+
@property (nonatomic, strong) NSDictionary *facebookUserInfo;
2631

32+
@end
2733

28-
34+
@class FBSDKLoginManager;
2935
@interface CYFacebook (Login)
3036

37+
@property (nonatomic, strong) FBSDKLoginManager *loginManager;
38+
3139
/**
3240
* facebook登录
3341
* 可选的权限:

CYUtilProject/CYShareSDK/CustomShare/CYFacebook+Login.m

+94-33
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,57 @@ - (FBSDKAccessToken *)fbSDKAccessToken {
3636
@end
3737

3838

39+
@implementation CYUserInfo (Facebook)
40+
41+
static char CYShareSDK_CYUserInfo_facebookUserInfoKey;
42+
43+
@dynamic facebookUserInfo;
44+
45+
- (void)setFacebookUserInfo:(NSDictionary *)facebookUserInfo {
46+
objc_setAssociatedObject(self,
47+
&CYShareSDK_CYUserInfo_facebookUserInfoKey,
48+
facebookUserInfo,
49+
OBJC_ASSOCIATION_RETAIN);
50+
51+
self.userId = facebookUserInfo[@"id"];
52+
self.nickname = facebookUserInfo[@"name"];
53+
NSString *gender = facebookUserInfo[@"gender"];
54+
if ([gender isEqualToString:@"male"]) {
55+
self.gender = 1;
56+
} else if ([gender isEqualToString:@"female"]) {
57+
self.gender = 2;
58+
}
59+
}
60+
61+
- (NSDictionary *)facebookUserInfo {
62+
return objc_getAssociatedObject(self, &CYShareSDK_CYUserInfo_facebookUserInfoKey);
63+
}
64+
65+
@end
66+
3967

4068
@implementation CYFacebook (Login)
4169

70+
static char CYShareSDK_CYFacebook_facebookLoginManagerKey;
71+
72+
@dynamic loginManager;
73+
74+
- (void)setLoginManager:(FBSDKLoginManager *)loginManager {
75+
objc_setAssociatedObject(self,
76+
&CYShareSDK_CYFacebook_facebookLoginManagerKey,
77+
loginManager,
78+
OBJC_ASSOCIATION_RETAIN);
79+
}
80+
81+
- (FBSDKLoginManager *)loginManager {
82+
return objc_getAssociatedObject(self,
83+
&CYShareSDK_CYFacebook_facebookLoginManagerKey);
84+
}
85+
86+
- (BOOL)loginWithCallback:(CYLoginCallback)callback {
87+
return [self loginWithPermissions:nil callback:callback];
88+
}
89+
4290
- (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions callback:(CYLoginCallback)callback {
4391
return [self loginWithPermissions:permissions
4492
fromViewController:[[[UIApplication sharedApplication] keyWindow] rootViewController]
@@ -49,50 +97,63 @@ - (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions
4997
fromViewController:(UIViewController *)viewController
5098
callback:(CYLoginCallback)callback {
5199

52-
if (permissions.count == 0) {
53-
return NO;
54-
}
100+
// if (permissions.count == 0) {
101+
// return NO;
102+
// }
55103

56-
FBSDKLoginManager *manager = [[FBSDKLoginManager alloc] init];
57-
[manager logInWithReadPermissions:permissions
58-
fromViewController:viewController
59-
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
60-
dispatch_async(dispatch_get_main_queue(), ^{
61-
62-
NSInteger statusCode = 0;
63-
NSString *msg = nil;
64-
CYLoginInfo *loginInfo = nil;
65-
if (error) {
66-
statusCode = error.code;
67-
msg = error.localizedDescription;
68-
} else if (result.isCancelled) {
69-
statusCode = -1;
70-
msg = NSLocalizedString(@"Cancelled", nil);
71-
} else {
72-
statusCode = 0;
73-
msg = NSLocalizedString(@"Success", nil);
74-
loginInfo = [[CYLoginInfo alloc] init];
75-
loginInfo.fbSDKAccessToken = result.token;
76-
self.loginInfo = loginInfo;
77-
}
78-
if (callback) {
79-
callback(statusCode, msg, loginInfo);
80-
}
81-
});
82-
}];
104+
if (!self.loginManager) {
105+
self.loginManager = [[FBSDKLoginManager alloc] init];
106+
self.loginManager.loginBehavior = FBSDKLoginBehaviorNative;
107+
}
108+
[self.loginManager logInWithReadPermissions:permissions
109+
fromViewController:viewController
110+
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
111+
dispatch_async(dispatch_get_main_queue(), ^{
112+
113+
NSInteger statusCode = 0;
114+
NSString *msg = nil;
115+
CYLoginInfo *loginInfo = nil;
116+
if (error) {
117+
statusCode = error.code;
118+
msg = error.localizedDescription;
119+
} else if (result.isCancelled) {
120+
statusCode = -1;
121+
msg = NSLocalizedString(@"Cancelled", nil);
122+
} else {
123+
statusCode = 0;
124+
msg = NSLocalizedString(@"Success", nil);
125+
loginInfo = [[CYLoginInfo alloc] init];
126+
loginInfo.fbSDKAccessToken = result.token;
127+
self.loginInfo = loginInfo;
128+
}
129+
if (callback) {
130+
callback(statusCode, msg, loginInfo);
131+
}
132+
});
133+
}];
83134
return YES;
84135
}
85136

86-
#warning facebook user info
87137
- (BOOL)getUserInfo:(NSString *)userId callback:(CYGetUserInfoCallback)callback {
88138
if (!userId
89139
|| userId.length == 0) {
90140
return NO;
91141
}
92-
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"/%@", userId] parameters:nil HTTPMethod:@"GET"];
142+
FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:[NSString stringWithFormat:@"/%@?fields=id,name,email,first_name,last_name,short_name,gender", userId] parameters:nil HTTPMethod:@"GET"];
93143
[request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
94144

95-
NSLog(result);
145+
NSInteger statusCode = error.code;
146+
NSString *msg = [error localizedDescription];
147+
CYUserInfo *userInfo = nil;
148+
if (result) {
149+
statusCode = 0;
150+
userInfo = [[CYUserInfo alloc] init];
151+
userInfo.facebookUserInfo = result;
152+
self.userInfo = userInfo;
153+
}
154+
if (callback) {
155+
callback(statusCode, msg, userInfo);
156+
}
96157
}];
97158
return YES;
98159
}

CYUtilProject/CYShareSDK/CustomShare/CYQQ+Login.h

+2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757

5858
@interface CYQQ (Login)
5959

60+
- (BOOL)getUserInfoWithCallback:(CYGetUserInfoCallback)callback;
61+
6062
@end
6163

6264
#endif

CYUtilProject/CYShareSDK/CustomShare/CYQQ+Login.m

+6-5
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,13 @@ - (NSDictionary *)qqUserInfo {
6868
@end
6969

7070
@implementation CYQQ (Login)
71+
7172
#pragma mark - login actions
73+
- (BOOL)loginWithCallback:(CYLoginCallback)callback {
74+
return [self loginWithPermissions:@[ kOPEN_PERMISSION_GET_SIMPLE_USER_INFO ]
75+
callback:callback];
76+
}
77+
7278
- (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions
7379
callback:(CYLoginCallback)callback {
7480
BOOL result = [self.oauth authorize:permissions];
@@ -85,11 +91,6 @@ - (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions
8591
callback:callback];
8692
}
8793

88-
- (BOOL)loginWithCallback:(CYLoginCallback)callback {
89-
return [self loginWithPermissions:@[ kOPEN_PERMISSION_GET_SIMPLE_USER_INFO ]
90-
callback:callback];
91-
}
92-
9394
- (BOOL)getUserInfoWithCallback:(CYGetUserInfoCallback)callback {
9495
BOOL result = [self.oauth getUserInfo];
9596
if (result) {

0 commit comments

Comments
 (0)