[英]Parse iOS PFTwitterUtils linkUser: doesn't do anything
因此,我正在使用Parse將用戶與其推特帳戶關聯。 在應用程序委托中,我具有以下內容:
[PFTwitterUtils initializeWithConsumerKey:CONSUMER_KEY consumerSecret:CONSUMER_SECRET];
然后,用戶單擊以將用戶鏈接到facebook的按鈕稱為:
-(IBAction)twitterConnectPressed{
NSLog(@"twitter");
[PFTwitterUtils linkUser:[PFUser currentUser] block:^(BOOL succeeded, NSError* error){
NSLog(@"haha");
if(succeeded){
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Done!" message:@"Connected with Twitter!" delegate:self cancelButtonTitle:@"okay" otherButtonTitles: nil];
[alert show];
self.fbButton.backgroundColor = [TGAPublic grey];
}else{
UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Oops" message:error.userInfo[@"error"] delegate:self cancelButtonTitle:@"okay" otherButtonTitles: nil];
[alert show];
}
}];
}
但是,即使linkUser:block:
它也不會執行任何操作。 它不會像[PFFacebookUtils linkUser:]
那樣創建彈出窗口來登錄Twitter,因此也不會最終調用該塊
PFTwitterUtils在iOS上似乎無法處理所有情況。 特別是,如果您沒有帳戶設置(設置-> Twitter),則不會啟動Web視圖並嘗試使用Web OAuth。 相反,如果您配置了多個Twitter帳戶(同樣在“設置”中),那么它似乎不會啟動操作表以允許您選擇要鏈接的帳戶。
關於如何執行這些操作的很棒的教程在這里公開了PFFacebookUtils的擴展: http ://natashatherobot.com/ios-twitter-login-parse/
它不做鏈接,只是登錄,但是應該是添加鏈接的良好基礎。
對於PFFacebookUtils和PFTwitterUtils(v。1.7.4)的鏈接/取消鏈接方法,我也遇到了類似的問題。
我設法使其起作用的唯一方法是,不幸的是,將它們與authData的內部Parse實現搞混了,以替換它們:
#import "TwitterAuthProvider.h"
#import "PFTwitterUtils.h"
#import "PFUser.h"
static NSString * const kTwitterKey = @"XXX";
static NSString * const kTwitterSecret = @"XXX";
@implementation TwitterAuthProvider
- (instancetype)init {
if ((self = [super init])) {
[PFTwitterUtils initializeWithConsumerKey:kTwitterKey consumerSecret:kTwitterSecret];
}
return self;
}
- (void)setAuthData:(id)twAuthData forUser:(PFUser *)user {
static NSString * const kParseAuthDataKey = @"authData";
static NSString * const kParseLinkedServiceNamesKey = @"linkedServiceNames";
static NSString * const kParseAuthProviderName = @"twitter";
NSMutableDictionary *authData = [[user valueForKey:kParseAuthDataKey] mutableCopy] ?: [NSMutableDictionary dictionary];
authData[kParseAuthProviderName] = twAuthData ?: [NSNull null];
[user setObject:authData forKey:kParseAuthDataKey];
[user setValue:authData forKey:kParseAuthDataKey];
NSMutableSet *linkedServices = [[user valueForKey:kParseLinkedServiceNamesKey] mutableCopy] ?: [NSMutableSet set];
if (twAuthData) {
[linkedServices addObject:kParseAuthProviderName];
} else {
[linkedServices removeObject:kParseAuthProviderName];
}
[user setValue:linkedServices forKey:kParseLinkedServiceNamesKey];
}
- (void)linkWithCompletion:(PFBooleanResultBlock)completion {
NSParameterAssert(completion != nil);
PFUser *user = [PFUser currentUser];
__weak typeof(self) weakSelf = self;
PF_Twitter *twitter = [PFTwitterUtils twitter];
[twitter authorizeWithSuccess:^(void) {
[weakSelf setAuthData:[self twitterAuthData] forUser:user];
[user saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) {
if (!succeeded) {
//revert
[weakSelf setAuthData:nil forUser:user];
}
completion(succeeded, error);
}];
} failure:^(NSError *error) {
completion(NO, error);
} cancel:^(void) {
completion(NO, nil);
}];
}
- (void)unlinkWithCompletion:(PFBooleanResultBlock)completion {
NSParameterAssert(completion != nil);
PFUser *user = [PFUser currentUser];
[self setAuthData:nil forUser:user];
[user saveInBackgroundWithBlock:completion];
}
- (NSDictionary *)twitterAuthData {
PF_Twitter *twitter = [PFTwitterUtils twitter];
return @{
@"auth_token" : twitter.authToken,
@"auth_token_secret": twitter.authTokenSecret,
@"consumer_key": kTwitterKey,
@"consumer_secret": kTwitterSecret,
@"id": twitter.userId,
@"screen_name": twitter.screenName,
};
}
@end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.