TWTweetComposeViewController でツィート

2011年10月15日土曜日 | Published in | 7 コメント

このエントリーをはてなブックマークに追加

iOS 5 から Twitter投稿用の API が追加された。前から興味があったので試してみた。
TWTweetComposeViewController Class Reference

(2012/02/24追記あり) 

使い方


プロジェクトへフレームワークを追加しておく。

使いかたはこんな感じ。
#import <Twitter/TWTweetComposeViewController.h>

    TWTweetComposeViewController *viewController =
        [[TWTweetComposeViewController alloc] init];

    [viewController setInitialText:@"Initial String"];
    [viewController addImage:image];
    [viewController addURL:[NSURL URLWithString:@"http://www.apple.com/"]];

    viewController.completionHandler = ^(TWTweetComposeViewControllerResult res) {
        if (res == TWTweetComposeViewControllerResultDone) {
            NSLog(@"done");
               :
        } else if (res == TWTweetComposeViewControllerResultCancelled) {
            NSLog(@"cancel");
              :
        }
    };
    
    [self presentModalViewController:viewController animated:YES];
}
5分もかからない、コピペすれば数秒。iOS5以前の苦労がウソのような超簡単さ....。

presentModalViewController:viewController: で表示すると専用の投稿画面が立ち上がる。この画面はローカライズされていないようだ。
(2012/02/24追記) Storyboardもしくは呼び出し元のビューをローカライズすると、この画面もそれに合わせた言語になるとのこと。情報提供された方 Thanks!

また位置情報を追加することもできる。
Send を押すと投稿されて画面が閉じられる。この時、鳥のさえずり効果音も鳴る。

投稿もしくはキャンセルされると completionHandler が呼び出される。リファレンスによれば現在のスレッドで処理が実行されるようだ(別スレッドにはならない)。
Note that completion handlers are not called on any particular thread.

また UIPopoverController では使えないとのこと。
Warning: You cannot use an UIPopoverController object to present a TWTweetComposeViewController object.

利用可能かどうかを確認する為のクラスメソッドも用意されている。
// Returns if Twitter is accessible and at least one account has been setup.
+ (BOOL)canSendTweet;
iOS のTwitter設定でアカウントが登録されていない場合、NO が返る。

アカウント未登録状態で投稿画面を呼び出すとダイアログが表示される。
ここは日本語化されていないようだ。
Settings を押すと iOS の Twitter設定画面が開かれる。設定後にアプリを起動するとこのダイアログが消えた状態で復帰する。


サンプル


GitHub からどうぞ。
TweetSample at master from xcatsan/iOS5-Sample - GitHub

起動するとテキストビューが表示される。add image ボタンを押すと。カメラロールからイメージが追加できるようになっている。

投稿結果の例




備考


addImage: に複数画像を追加しても最初の一枚しか投稿されなかった。結果の BOOL値を確認したところ、2枚目以降は必ず NO が帰っていた。原因は不明。


参考情報


iOS5.0のTwitter APIを使って文字や画像をTweetする方法(TWTweetComposeViewController) - あらきんぐのiPhoneアプリ開発ブログ


Responses

  1. 匿名
    2012年1月17日 22:03

    いつも役に立つ記事をありがとうございます。
    一点、補足させて下さい。

    TWTweetComposeViewControllerResultDoneまたは、TWTweetComposeViewControllerResultCancelledの判定のあとに、

    [self dismissModalViewControllerAnimated:YES];

    を記述すると確実です。

    この記述がないと、プロジェクトによっては、Cancelボタンをタップしたときに1度目のタッチではモーダルヴューが閉じず、2度目のタップで閉じる現象が起きています。

  2. 匿名
    2012年1月17日 22:03

    いつも役に立つ記事をありがとうございます。
    一点、補足させて下さい。

    TWTweetComposeViewControllerResultDoneまたは、TWTweetComposeViewControllerResultCancelledの判定のあとに、

    [self dismissModalViewControllerAnimated:YES];

    を記述すると確実です。

    この記述がないと、プロジェクトによっては、Cancelボタンをタップしたときに1度目のタッチではモーダルヴューが閉じず、2度目のタップで閉じる現象が起きています。

  3. 匿名
    2012年1月17日 22:16

    GitHubの方には、TWTweetComposeViewControllerResultDoneの場合は、
    [self dismissModalViewControllerAnimated:YES];
    が入っていましたね。失礼いたしました。

  4. 匿名
    2012年1月17日 22:16

    GitHubの方には、TWTweetComposeViewControllerResultDoneの場合は、
    [self dismissModalViewControllerAnimated:YES];
    が入っていましたね。失礼いたしました。

  5. xcatsan says:
    2012年1月18日 7:10

    おはようございます。
    指摘ありがとうございました。
    なるほど dismiss... を入れ忘れると挙動が怪しくなるのですね。

    また何かあれば遠慮無く教えて下さい。
    では。

  6. xcatsan says:
    2012年1月18日 7:10

    おはようございます。
    指摘ありがとうございました。
    なるほど dismiss... を入れ忘れると挙動が怪しくなるのですね。

    また何かあれば遠慮無く教えて下さい。
    では。

  7. 匿名
    2012年2月14日 18:10

    いつも非常に参考にさせていただいてます。

    今更のことですが、Storyboardもしくは呼び出し元のビューをローカライズ(マルチ言語対応)してあげるとTwitもローカライズされるようですね。

    一応、見る人にとっての補足も込めたコメントということで…

  8. 匿名
    2012年2月14日 18:10

    いつも非常に参考にさせていただいてます。

    今更のことですが、Storyboardもしくは呼び出し元のビューをローカライズ(マルチ言語対応)してあげるとTwitもローカライズされるようですね。

    一応、見る人にとっての補足も込めたコメントということで…

  9. xcatsan says:
    2012年2月24日 12:38

    こんにちは。返事が遅くなりました。

    > 今更のことですが、Storyboardもしくは呼び出し元のビューをローカライズ(マルチ言語対応)してあげるとTwitもローカライズされるようですね。

    おお、そうなんですね。
    確かに Mobile Safari で開くと日本語化されてました。
    今度試してみます。

    貴重な情報ありがとうございました。

  10. xcatsan says:
    2012年2月24日 12:38

    こんにちは。返事が遅くなりました。

    > 今更のことですが、Storyboardもしくは呼び出し元のビューをローカライズ(マルチ言語対応)してあげるとTwitもローカライズされるようですね。

    おお、そうなんですね。
    確かに Mobile Safari で開くと日本語化されてました。
    今度試してみます。

    貴重な情報ありがとうございました。

  11. @a_kashima_
    2013年2月14日 11:47

    既にご存知かもしれませんが、ローカライズ設定については、全体的な設定として、変更することも可能なようです。

    info.plistにLocalizationsのArray型があるので、ここにJapanを追加すればできました。

  12. @a_kashima_
    2013年2月14日 11:47

    既にご存知かもしれませんが、ローカライズ設定については、全体的な設定として、変更することも可能なようです。

    info.plistにLocalizationsのArray型があるので、ここにJapanを追加すればできました。

  13. xcatsan says:
    2013年2月19日 7:53

    こんにちは。なるほど Info.plist - Localizations でも対応可能なのですね。こちらの方が全体設定なのでいいかもしれません。情報ありがとうございました。

  14. xcatsan says:
    2013年2月19日 7:53

    こんにちは。なるほど Info.plist - Localizations でも対応可能なのですね。こちらの方が全体設定なのでいいかもしれません。情報ありがとうございました。

Leave a Response

人気の投稿(過去 30日間)