我使用 Twitter 本身提供的 Twitter 框架来实现“使用 Twitter 登录”功能。
根据他们的文档,它利用了 iOS 系统的 Twitter 帐户(用户在 iOS 设置应用程序中配置的帐户)。它工作正常,例如,如果用户在设置中配置了帐户,那么它不会要求提供凭据。如果用户没有在“设置”中配置帐户,那么它将提升登录屏幕。就流程和我的要求而言,我对此没有任何问题。
但是,如果用户访问他/她的 Twitter 帐户,并撤销对该应用程序的访问权限,那么事情对我来说就不合适了。我仍然可以使用 twitter 提供的方法获取用户详细信息。我错过了 Twitter 可能提供的东西吗?
这是我的代码片段。成功登录后,我调用了usersShow
方法。在这种方法中,我能够获取用户数据,即使用户从 Twitter 帐户(从站点)撤消了对该应用程序的权限。如果用户没有授予该应用程序的权限,那么我应该得到一些不同的东西。可能我错过了一些东西。
#pragma mark
#pragma mark - Twitter framework
- (IBAction)btnTwitterLogin_pressed:(id)sender
{
[[Twitter sharedInstance] logInWithCompletion:^
(TWTRSession *session, NSError *error) {
if (session)
{
// This session is then used to make Twitter API requests.
NSLog(@"%@", [session userID]);
NSLog(@"%@", [session userName]);
NSLog(@"%@", [session authToken]);
NSLog(@"%@", [session authTokenSecret]);
[self usersShow:[session userID]];
//[self getUserWithUserID:[session userID]];
}
else
{
NSLog(@"Error: %@", [error localizedDescription]);
}
}];
}
-(void)usersShow:(NSString *)userID
{
NSString *statusesShowEndpoint = kURLTwitterUserInfo;
NSDictionary *params = @{@"user_id": userID};
NSError *clientError;
NSURLRequest *request = [[[Twitter sharedInstance] APIClient]
URLRequestWithMethod:@"GET"
URL:statusesShowEndpoint
parameters:params
error:&clientError];
if (request) {
[[[Twitter sharedInstance] APIClient]
sendTwitterRequest:request
completion:^(NSURLResponse *response,
NSData *data,
NSError *connectionError) {
if (data) {
// handle the response data e.g.
NSError *jsonError;
NSDictionary *json = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:&jsonError];
NSLog(@"%@",[json description]);
// I am being able to get user data here...
}
else {
NSLog(@"Error code: %ld | Error description: %@", (long)[connectionError code], [connectionError localizedDescription]);
}
}];
}
else {
NSLog(@"Error: %@", clientError);
}
}
-(IBAction)btnTwitterLogout_pressed:(id)sender
{
[[Twitter sharedInstance] logOut];
}