2

私はiPhone4でアプリを開発してテストしていましたが、それは素晴らしかったです。Twitterコードをテストしたところ、うまく機能しました。ユーザーのアカウントを取得してから、特定のアカウントをフォローします。

今日、私は他の2つのデバイスにアプリをインストールしてテストしようとしましたが、機能しません

応答:

{"errors":[{"message":"Bad Authentication data","code":215}]}

コード:

- (void)followApp {
    if (!self.account) {
        [self _signInWithHandler:^{
            [self followApp];
        }];
        return;
    }

    NSURL *feedURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/friendships/create.json"];
    NSDictionary *parameters = @{
    @"follow" : @"true",
    @"screen_name" : [MCAppManager sharedManager].applicationTwitterHandle
    };

    TWRequest *twitterFeed = [[TWRequest alloc] initWithURL:feedURL
                                                 parameters:parameters
                                              requestMethod:TWRequestMethodPOST];

    twitterFeed.account = self.account;
    // Perform the twitter request
    [twitterFeed performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        if (!error) {
            NSLog(@"response: %@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
        } else {
            dispatch_async(dispatch_get_main_queue(), ^{
                self.isFollowing = NO;
                MCAlertError([error localizedDescription]);
            });
        }
    }];

    self.isFollowing = YES;
}

編集:

OK、その理由は、他のデバイスのTwitterアカウントがパスワードなしで追加されたためと思われます。設定アプリに行きましたが、アカウントはパスワードなしでそこにありました。

これは実際には最終的な答えではありませんが、少なくともエラーがどこから来ているのかを説明しています。

4

1 に答える 1

3

最初に資格情報チェックを実行するための文書化された方法はないようです。

結果を確認し、認証エラーがあった場合はユーザーに通知する必要があります。

//[...]
[twitterFeed performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

    if (error == nil) {

        NSError *jsonError = nil;

        id data = [NSJSONSerialization JSONObjectWithData:responseData
                                                  options:NSJSONReadingMutableLeaves
                                                    error:&jsonError];
        if ([urlResponse statusCode] == 200) {

            if (data) {

                NSLog(@"response: %@", data);
            } else {

                dispatch_async(dispatch_get_main_queue(), ^{
                    self.isFollowing = NO;
                    MCAlertError([jsonError localizedDescription]);
                });
            }
        } else if ([urlResponse statusCode] == 400) {

            //Bad authorization data
            if ([[[[data objectForKey:@"errors"] objectAtIndex:0] objectForKey:@"code"] intValue] == 215) {

                dispatch_async(dispatch_get_main_queue(), ^{
                    self.isFollowing = NO;
                    MCAlertError(@"To use this feature you need a twitter account properly authenticated in your iOS settings");
                });
                self.account = nil;
            } else {

                dispatch_async(dispatch_get_main_queue(), ^{
                    self.isFollowing = NO;
                    MCAlertError(@"Generic service error");
                });
            }
        } else {

            dispatch_async(dispatch_get_main_queue(), ^{
                self.isFollowing = NO;
                MCAlertError(@"Generic service error");
            });
        }
    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.isFollowing = NO;
            MCAlertError([error localizedDescription]);
        });
    }
}];
//[...]
于 2013-07-10T14:27:53.200 に答える