[iOS] Fabric 入門 #6 Twitter にツイートを投稿する (REST API 編)

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

REST API を使ってツイートを投稿する

前回TWTRComposer というクラスを使って、ダイアログからツイートする方法を紹介しました。今回はこれの発展形(?)で、Twitter の REST API を使ってツイートしてみたいと思います。

今回紹介する方法は REST API をコールするので、UI は特に必要ありません。ユーザーに変わってアプリからツイートを投稿することができます。以下のような場合に有効です。

  • アプリ内の投稿機能のついでにツイートも投稿させる
  • ゲームのスコアをツイートさせる
  • 診断結果をツイートさせる
  • ツイートをアプリから投稿したことにする *1

statuses/update API をコールする

ツイートを投稿するには POST statuses/update という API を利用します。API の呼び出し方の基本は以前解説していますので、こちらをちょっと書き換えるだけでOKです。

#import "ViewController.h"
#import <TwitterKit/TwitterKit.h>
 
@interface ViewController ()
 
@property (weak, nonatomic) TWTRLogInButton *logInButton;
 
@end
 
@implementation ViewController
 
- (void)viewDidLoad {
    [super viewDidLoad];
     
    // TWTRLogInButtonの設定
    TWTRLogInButton *logInButton = [TWTRLogInButton buttonWithLogInCompletion:^(TWTRSession *session, NSError *error) {
        if (error) {
            NSLog(@"Error : %@", error);
        } else {
            NSLog(@"UserName : %@", session.userName);
            self.logInButton.hidden = YES;
            [self composeTweetREST];
        }
    }];
    logInButton.center = self.view.center;
    self.logInButton = logInButton;
    [self.view addSubview:logInButton];
}
 
- (void)composeTweetREST
{
    // タイムラインを取得
    NSString *endpoint = @"https://api.twitter.com/1.1/statuses/update.json";
    NSDictionary *parameters = @{@"status":@"スパイダーフラッシュローリングサンダー"};
    NSError *error = nil;
    TWTRAPIClient *client = [[Twitter sharedInstance] APIClient];
    NSURLRequest *request = [client URLRequestWithMethod:@"POST"
                                                     URL:endpoint
                                              parameters:parameters
                                                   error:&error];
    if (error) {
        NSLog(@"Error: %@", error);
        return;
    }
    [client sendTwitterRequest:request
                    completion:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
                        if (connectionError) {
                            NSLog(@"Error: %@", error);
                            return;
                        }
                        NSError *jsonError = nil;
                        id jsonData = [NSJSONSerialization JSONObjectWithData:data
                                                                      options:NSJSONReadingMutableContainers
                                                                        error:&jsonError];
                        if (jsonError) {
                            NSLog(@"Error: %@", jsonError);
                            return;
                        }
                        NSLog(@"Result : %@", jsonData);
                    }];
}

@end

アプリを実行するとログイン中の Twitter ユーザーでツイートが投稿されます。

twitter-statuses-update

まとめ

今回の内容は Twitter と連係するアプリを開発する場合、よく使う実装だと思います。Fabric を使うとかなり簡単に実装できて良いですね!

脚注

  1. 保存されるツイートの source がアプリ名になります。TWTRComposer 及び Social フレームワークを使用した場合はここが Apple で統一されます。この表示は現在公式アプリでは使われていませんが、一部 Twitter クライアントアプリでは利用されています。