iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
iOS5からTwitter frameworkが用意されるようになり便利になった。ただ、機能的には簡素な部分があるので、他のオープンソースのフレームワークの方が便利な事もあるが。
Twitter.frameworkとAccounts.frameworkをプロジェクトに追加し、それぞれのヘッダー・ファイルをimportする。
OS X Lionには、Twitter/Accounts frameworkが用意されていない為か、シミュレータではtweetを投稿できない。iOSではTwitterのアカウント管理の機能がOS側に用意されている。アカウントの変更の通知を受ける為と、投稿可能かどうかを知るため、以下のコードを追加する。
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(canTweetStatus)
name:ACAccountStoreDidChangeNotification
object:nil];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
[self canTweetStatus];
}
- (void)canTweetStatus {
if ([TWTweetComposeViewController canSendTweet]) {
self.tweetStatusLabel.text = @"can send tweet";
}
else {
self.tweetStatusLabel.text = @"can't send tweet";
}
}
OS Xのシミュレータでは"can send tweet"、iOSの実機では"can't send tweet"と表示されるはずだ。
このサンプル・コードを実機で起動した状態で、iOSのTwitterアカウントに変更を加えたら、どうなるだろうか?試してみよう。
設定で、Twitterアカウントを削除してみたが、通知はやってこないようだ。一旦、アプリケーションを終了させて、起動させると"can't send tweet"と表示された。
OSのTwitter機能を利用する場合、ユーザに利用していいのか確認のダイアログが表示されたが、何をやったら表示されるのだろうか?投稿可能かどうかのメソッドを呼ぶだけでは、この確認は表示されないようだ。そこで、投稿機能を追加してみた。
- (IBAction)tweet:(id)sender
{
TWTweetComposeViewController *tweetViewController = [[TWTweetComposeViewController alloc] init];
[tweetViewController setInitialText:@"hello, world"];
[tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
NSString *output;
switch (result) {
case TWTweetComposeViewControllerResultCancelled:
output = @"Tweet cancelled.";
break;
case TWTweetComposeViewControllerResultDone:
output = @"Tweet done.";
break;
default:
break;
}
[self performSelectorOnMainThread:@selector(displayText:)
withObject:output
waitUntilDone:NO];
[self dismissModalViewControllerAnimated:YES];
}];
[self presentModalViewController:tweetViewController animated:YES];
}
- (void)displayText:(NSString *)text
{
self.tweetStatusLabel.text = text;
}
おっと、先ほどアカウント情報を削除していたので、設定を催促するダイアログが表示された!
今回は、既に設定済みの場合を確認したいので、アプリケーションを終了させて、アカウント情報を設定後に、再起動させてみた。
何も言われず投稿できてしまった。また、設定のTwitterを確認したところ、許可するアプリケーションの一覧にこのサンプルコードが追加されてる。あれ、ユーザに確認がこなかったけ?とりあえず、許可をOffしてみる。
すると、確認のダイアログが表示された。予想通りの動きでない部分があるが、この確認をフレームワーク側で勝手にやってくれるのかどうかを確認したかったので、よしとしよう。