Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード

2011-02-23

カメラアプリにFacebookへの写真投稿機能をつける

1年前に作った「頭身カメラ」というアプリに、

Facebookへの投稿機能をつけてみました。


f:id:shu223:20110223074848j:image


(AppBankさんへの寄稿記事)

http://www.appbank.net/2010/07/15/iphone-application/140803.php


(AppStore)

http://itunes.apple.com/jp/app/id379198789?mt=8




1. facebook iOS SDKをダウンロード

https://github.com/facebook/facebook-ios-sdk


2. FBConnectヘッダを自分のプロジェクトに追加する

src/facebook-ios-sdk.xcodeproj を開き、

FBConnectフォルダを自分のプロジェクトにドラッグ&ドロップする。


3. FBConnectヘッダをインポート

Facebookの機能を使いたいクラスでヘッダインポート。

#import "FBConnect.h"

この時点でビルド可能。


4. Facebookでアプリケーションを登録する

http://www.facebook.com/developers/createapp.php

appID(アプリID)を控えておきます


(ここまでの手順はSDKのREADMEに書かれています。)


5. カスタムURLスキームを設定する

Facebookアプリでは認証をsafariで行い、カスタムURLスキームでアプリに戻ってきます。

そのための設定。

  1. Info.plistに項目を追加。
  2. keyの"Information Property List"の下に"URL types"を追加
  3. 続いて"URL types" > "Item0" > "URL Schemes" > "Item0"、なければこのように追加していく
  4. 最後の"Item0"の valueに "fb[appId]"を追加、appIdはいつも通り

(参考ページ)http://d.hatena.ne.jp/tkwn/20101215/1292402660


6. Facebookクラス初期化

3でFBConnect.hをインポートしたクラスで、

xxxx.h

Facebook *facebook;

xxxx.m

facebook = [[Facebook alloc] initWithAppId:appId];

7. カスタムURLスキームで戻ってくる際に呼ばれるデリゲートメソッドを実装

AppDelegateに。viewControllerは6でFacebookクラスオブジェクトを持たせたクラスのインスタンス。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
	return [[viewController facebook] handleOpenURL:url];
}

8. 認証処理の実装

6でFacebookクラスオブジェクトを持たせたクラスで、

NSArray *permissions = [NSArray arrayWithObjects:@"publish_stream", @"offline_access",nil];
[facebook authorize:permissions delegate:self];

ログイン処理完了後に呼ばれるデリゲートメソッドを実装。

(ヘッダでFBSessionDelegateプロトコルへの準拠を宣言しておく)

- (void)fbDidLogin {
	NSLog(@"login");
}

-(void)fbDidNotLogin:(BOOL)cancelled {
	NSLog(@"did not login");
}

9. 写真投稿処理の実装

カメラアプリなので UIImageView 型の resultImageView というインスタンス変数を持っているとして、

NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
							   resultImageView.image, @"picture",
							   nil];
[facebook requestWithMethodName:@"photos.upload"
					   andParams:params
				   andHttpMethod:@"POST"
					 andDelegate:self];

投稿処理完了後に呼ばれるデリゲートメソッドを実装。

- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response {
	NSLog(@"received response");
};

- (void)request:(FBRequest *)request didLoad:(id)result {
	if ([result isKindOfClass:[NSArray class]]) {
		result = [result objectAtIndex:0];
	}
	if ([result objectForKey:@"owner"]) {
		NSLog(@"Photo upload Success");
	} else {
		NSLog(@"result name:%@",[result objectForKey:@"name"]);
	}
};

- (void)request:(FBRequest *)request didFailWithError:(NSError *)error {
	NSLog(@"didFailWithError:");
};

以上!SDKが用意されてるので簡単ですね。

サンプルコードは週末にアップする予定です。




SGSG 2011/06/26 21:54 この記事のサンプルコードがぜひ欲しいです!

isis 2012/04/03 12:39 すいません><sampleコードはアップされていますか?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 |