@@ -36,9 +36,57 @@ - (FBSDKAccessToken *)fbSDKAccessToken {
36
36
@end
37
37
38
38
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
+
39
67
40
68
@implementation CYFacebook (Login)
41
69
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
+
42
90
- (BOOL )loginWithPermissions : (NSArray <NSString *> *)permissions callback : (CYLoginCallback)callback {
43
91
return [self loginWithPermissions: permissions
44
92
fromViewController: [[[UIApplication sharedApplication ] keyWindow ] rootViewController ]
@@ -49,50 +97,63 @@ - (BOOL)loginWithPermissions:(NSArray<NSString *> *)permissions
49
97
fromViewController : (UIViewController *)viewController
50
98
callback : (CYLoginCallback)callback {
51
99
52
- if (permissions.count == 0 ) {
53
- return NO ;
54
- }
100
+ // if (permissions.count == 0) {
101
+ // return NO;
102
+ // }
55
103
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
+ }];
83
134
return YES ;
84
135
}
85
136
86
- #warning facebook user info
87
137
- (BOOL )getUserInfo : (NSString *)userId callback : (CYGetUserInfoCallback)callback {
88
138
if (!userId
89
139
|| userId.length == 0 ) {
90
140
return NO ;
91
141
}
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" ];
93
143
[request startWithCompletionHandler: ^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
94
144
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
+ }
96
157
}];
97
158
return YES ;
98
159
}
0 commit comments