簡體   English   中英

解析iOS PFTwitterUtils鏈接用戶:不執行任何操作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM