iOS 5でTwitterを使う方法(カスタムな方)


先日、「iOS 5への Twitterアカウントの登録とアプリからのアクセス」という iOS 5から Twitter アカウントをアクセスする方法と iOS 5の設定の話を書いた。
で、今回は実際に取得したアカウントを使ってツイートしてみるまで。


とりあえず Apple のサンプル「Tweeting」にある sendCustomTweet の部分を元に、Twitter アカウントを選択できるように変更してみた。
動かしてみたサンプルは bitbucket に置いておいたので動かしてみたい人はどうぞ。

以下、サンプルの簡単な解説。


[2013/06/12 Update]
Twitter API 1.0 終了に伴い API 1.1 を使うように変更が必要になります。

Twitter アカウントの取得

ざっくりこんな感じで。

- (IBAction)showAccount:(id)sender {
	// Create an account store object.
	ACAccountStore *accountStore = [[ACAccountStore alloc] init];
	
	// Create an account type that ensures Twitter accounts are retrieved.
	ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
	
	// Start activity indicator while getting account list.
	[activityIndicator startAnimating];
	
	// Request access from the user to use their Twitter accounts.
	[accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
		if(granted) {
			// Get the list of Twitter accounts.
			self.accountsArray = [accountStore accountsWithAccountType:accountType];
			[self.accountTableView reloadData];
		}
		[self.activityIndicator stopAnimating];
	}];
}

これはほぼ前に書いたものと同じ。

アカウントストアを作ってアカウントタイプを ACAccountTypeIdentifierTwitter に指定して、Twitter アカウントのリストを取得している。
前と違うのはアカウント取得の前後でクルクルインジケーターを出したり消したりしてる部分。
それと、CompletionHandler でアカウント取得に成功した場合には、テーブルのデータ配列にアカウントのリストを設定してテーブルを再描画してる。


ここで、iOS 5 の設定次第では取得に失敗する場合がある。
まず、iOS 5 の「設定」->「Twitter」画面の一番下にある「許可:」の項目で、アプリケーションにアカウントの使用を許可してなくてはいけない。

もし、ここで許可が「オフ」の場合、アプリからアカウント取得を試みると許可するかどうかを確認するダイアログが表示される。

ここで許可をすれば問題ないが、許可しなかった場合には上記リストの「if (granted)」が NO になってアカウントの取得に失敗する。

sendCustomTweet してみる

アカウントを取得したら後はツイートするだけ。
ざっくりこんな感じで。

- (IBAction)tweet:(id)sender {
	ACAccountStore *accountStore = [[ACAccountStore alloc] init];
	ACAccount *twitterAccount = [accountStore accountWithIdentifier:self.userID];

	// Prepare tweet message.
	NSDate *now = [NSDate date];
	NSString *tweetMessage = [NSString stringWithFormat:@"Hello!\n%@", [now description]];

	// Create a request, which in this example, posts a tweet to the user's timeline.
	// This example uses version 1 of the Twitter API.
	// This may need to be changed to whichever version is currently appropriate.
	TWRequest *postRequest = [[TWRequest alloc] initWithURL:[NSURL URLWithString:@"http://api.twitter.com/1/statuses/update.json"]
						parameters:[NSDictionary dictionaryWithObject:tweetMessage forKey:@"status"]
						requestMethod:TWRequestMethodPOST];
	
	// Set the account used to post the tweet.
	[postRequest setAccount:twitterAccount];
	
	// Start activity indicator.
	[activityIndicator startAnimating];
	
	// Perform the request created above and create a handler block to handle the response.
	[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
		self.responseLabel.text = [NSString stringWithFormat:@"HTTP response status: %i", [urlResponse statusCode]];
		[self.activityIndicator stopAnimating];
	}];

}

最初の 2行でアカウントストアから「accountWithIdentifier」を使って Tweet するアカウントを取得してる。
「accountWithIdentifier」で使っている self.userID は、self.accountTableView でアカウントを選択した時にアカウントの identifier を入れておいたプロパティ。
アカウントはこうやって identifier プロパティを使って取得できるので、identifier を保存しておけば次回アプリ起動時にも前回選択したアカウントを取得できる。


アカウント取得以降は TWRequest を作って、ツイートするアカウントをセットしてツイートするだけ。
肝は TWRequest を作る部分だと思うけど、ここは iOS 5 関係なく Twitter API の使い方なのでググれば使い方がたくさん出てくると思う。
(でも parameters の NSDictionary 作るのが面倒なんだろうな…)


とりあえず、ツイートするだけならこれで OK!
iOS 5Twitter は本当に楽チンになった!