iOSアプリからのTwitterへのツィート

「iOS 7 App Development Essentials (English Edition) [Kindle版]」
を参考に、iOSアプリケーションからTwitterにつぶやいてみる。本の方では、ツィート数を取得しているサンプルなので、リクエストが違うので注意。

-(void)tweet{
    ACAccountStore *account = [[ACAccountStore alloc]init];
    ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
    
    [account requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted , NSError *error){
        if(granted == YES) {
            NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
            if( [arrayOfAccounts count] > 0){
                ACAccount *twitterAccount = [arrayOfAccounts lastObject];
                NSURL *requestURL = [NSURL URLWithString:@"https://api.twitter.com/1.1/statuses/update.json"];
                NSMutableDictionary *parameters = [[NSMutableDictionary alloc]init];
                [parameters setObject:@"TEST日本語はどうかな?" forKey:@"status"];
                SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeTwitter requestMethod:SLRequestMethodPOST URL:requestURL parameters:parameters];
                
                postRequest.account = twitterAccount;
                
                [postRequest performRequestWithHandler:
                 ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
                     NSLog(@"send");
                     NSLog(@"error=%@",[error localizedDescription]);
                 }];
            }
        }else{
            NSLog(@"Handle failure");
        }
    }];
}

試したiPad miniにはTwitterのアカウントを二つ登録してあって、二つ目(実際に使用されるアカウント)のパスワードをTwitterアプリの方で設定していなかったため、ツィートが失敗していたのだが、ソース中のgranted値はYESを返していたし、変数errorは何も語らなかったので、理由がわかるのにちょっと時間が掛かってしまった。

結局のところ、非常に簡単にツィートできることがわかった。iOS6以降で有効。

一つ気づいたのが、上記の方法でサポートしているSNSとして、LinkedInが無い。ヘッダの中で、ACAccountTypeIdentifierLinkedInが定義されているが、unavailableになっている。