酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOS 5で追加されたTwitter.frameworkを使ってツイートを投稿する

id:yukioda1024が少し前にTwitter.frameworkを使って投稿する。 - gonouの日記のような記事を書いているのを思い出しました。

今まで各自それぞれがiOS向けのTwitter SDKが追加していましたが、iOS 5でiOSそのものにTwitter機能が統合されました。より簡単にTwitterへステータスを投稿することができるようになりました。iOS 5以降の環境でアプリケーションを開発する機会がなかったのでTwitter.frameworkを使っていなかったのですが、id:yukioda1024の記事を参考にして実際にコードを書きながら動かしてみました。

Twitterアカウントが登録されているかどうか判定する

TWTweetComposeViewController#canSendTweetメソッドでTwitterアカウントが登録されているかどうかを確認することができます。

// Twitterアカウントが既に登録済みかどうかを判定する
if ([TWTweetComposeViewController canSendTweet]) {
    // Twitterアカウントが登録済み
} else {
    // Twitterアカウントが登録されていない
}

ツイート用の画面を表示させる

TWTweetComposeViewControllerクラスのインスタンスを生成して、モーダル表示させるとツイート画面が表示されます。

if ([TWTweetComposeViewController canSendTweet]) {
    // ツイート用の画面をを表示する
    TWTweetComposeViewController* vc = [[TWTweetComposeViewController alloc] init];
    [self presentViewController:vc animated:YES completion:nil];
    [vc release];
} else {
    // Twitterアカウントが登録されていない
}

上記のサンプルコードを実行させてみました。


初期テキストを登録した状態でツイート画面を表示する

if ([TWTweetComposeViewController canSendTweet]) {
    // ツイート用の画面を表示する
    TWTweetComposeViewController* vc = [[TWTweetComposeViewController alloc] init];
    [vc setInitialText:@"初期状態のテキストだよ!Twitter Frameworkのテスト中"];
    [self presentViewController:vc animated:YES completion:nil];
    [vc release];
} else {
    // Twitterアカウントが登録されていない
}

上記のサンプルコードを実行させてみました。


TWTweetComposeViewController周りのイベント

ツイート画面のモーダル表示の完了、モーダル表示を閉じるのが完了、ツイートの成功、ツイートのキャンセルをトリガーにして、もし何らかの処理をさせたい場合に以下のように記載する事でそれぞれのタイミングにて任意の処理を実行させることができます。

// ツイート用の画面を表示する
TWTweetComposeViewController* vc = [[TWTweetComposeViewController alloc] init];
[vc setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
    if (result == TWTweetComposeViewControllerResultDone) {
        NSLog(@"投稿に成功しました.");
    } else if (result == TWTweetComposeViewControllerResultCancelled) {
        NSLog(@"投稿をキャンセルしました.");
    }
    [self dismissViewControllerAnimated:YES completion:^{
        NSLog(@"モーダル表示を閉じるの完了!");
    }];
}];
[self presentViewController:vc animated:YES completion:^{
    NSLog(@"モーダル表示の完了!");
}];
[vc release];

上記のサンプルコードを実行させてみました。

アカウントを登録していない場合

上記のサンプルコードでは、いちいちTWTweetComposeViewController#canSendTweetメソッドでTwitterアカウントが登録されているかどうかを確認して、ツイート画面を表示させるかどうかを判定していました。直接TWTweetComposeViewControllerクラスのインスタンスを生成し表示させると、Twitterアカウントが登録されているかどうかを自動で判定してもらえます。アカウントを登録していない場合には下図のようなアラートが表示されます。

Settingsボタンを押下することで、アカウントの設定画面へ遷移します。