トップ «前の日記(2012-04-17) 最新 次の日記(2012-04-20)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|

2012-04-19 [iOS]Tweeting(アカウント管理)

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;
}

おっと、先ほどアカウント情報を削除していたので、設定を催促するダイアログが表示された!

NoTwitterAccounts

今回は、既に設定済みの場合を確認したいので、アプリケーションを終了させて、アカウント情報を設定後に、再起動させてみた。

何も言われず投稿できてしまった。また、設定のTwitterを確認したところ、許可するアプリケーションの一覧にこのサンプルコードが追加されてる。あれ、ユーザに確認がこなかったけ?とりあえず、許可をOffしてみる。

すると、確認のダイアログが表示された。予想通りの動きでない部分があるが、この確認をフレームワーク側で勝手にやってくれるのかどうかを確認したかったので、よしとしよう。

TwitterIsNotEnabled

_ ソースコード

GitHubからどうぞ。
https://github.com/murakami/workbook/tree/master/ios/Tweets - GitHub

_ 関連情報

iOS Twitter framework
Twitter Developersサイトの情報。
Tweeting
Developerサイトのサンプル・コード

トップ «前の日記(2012-04-17) 最新 次の日記(2012-04-20)» 編集