2011-03-14
Facebook iOS SDK を使用して近況の投稿やプロフィール取得を実装する
作ったアプリ, iPhone, Objective-C, Facebook, API
先日書いた記事『カメラアプリにFacebookへの写真投稿機能をつける』では、SDKのダウンロードから、OAuth認証の実装方法、画像投稿APIのたたき方、まで書きました。
その後『EncountMe』でもFacebook対応することになり、プロフィールの取得や近況の投稿などを実装したので、そのやり方などを書いておきます。
準備
- 先日の記事の通りに認証を済ませておきます。permissionsにはuser_about_me、publish_streamを設定します。
NSArray *permissions = [NSArray arrayWithObjects:@"user_about_me", @"publish_stream",nil]; [appDelegate.facebook authorize:permissions delegate:self];
- ヘッダで<FBRequestDelegate>への準拠を宣言し、レスポンス受信時、成功時、失敗時のデリゲートメソッドを実装しておきます。
- (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]; } NSLog(@"result:%@",result); }; - (void)request:(FBRequest *)request didFailWithError:(NSError *)error { NSLog(@"error:%@", [error localizedDescription]); };
プロフィールの基本データを取得する
[facebook requestWithGraphPath:@"me" andDelegate:self];
※facebookというのはFacebook iOS SDKのFacebookクラスのインスタンスです。(詳しくは先日の記事をご参照ください)
(実行結果)
result:{
education = (
{
school = {
id = {xxx};
name = {xxx};
};
type = College;
}
);
"first_name" = {xxx};
gender = male;
id = {xxx};
"last_name" = {xxx};
link = "http://www.facebook.com/profile.php?id=100000563263951";
locale = "ja_JP";
name = "\U5824\U4fee\U4e00";
timezone = 9;
"updated_time" = "2010-12-31T06:00:26+0000";
verified = 1;
work = (
{
employer = {
id = 100460806674287;
name = "\U30ab\U30e4\U30c3\U30af";
};
"start_date" = "2010-02";
}
);
}
fqlを用いてユーザーデータを取得する
Facebook SDK内のデモにあったもの。下記コードではfqlを使って、userテーブルからuidとnameを取得しています。
NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"SELECT uid,name FROM user WHERE uid=4", @"query",nil]; [facebook requestWithMethodName:@"fql.query" andParams:params andHttpMethod:@"POST" andDelegate:self];
(実行結果)
result:{
name = "Mark Zuckerberg";
uid = 4;
}
fqlのリファレンスはこちら
http://developers.facebook.com/docs/reference/fql/
userテーブルにどんなカラムがあるかはこちらから調べられます。
http://developers.facebook.com/docs/reference/fql/user/
投稿(ダイアログあり)
ヘッダでFBDialogDelegateへの準拠を宣言し、完了時のデリゲートメソッドを実装しておきます。
- (void)dialogDidComplete:(FBDialog *)dialog { NSLog(@"publish successfully"); }
下記のようにdialog:メソッドを実行すると、
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"Share on Facebook", @"user_message_prompt",nil]; [facebook dialog:@"feed" andParams:params andDelegate:self];
こういうダイアログが出てきます。
paramsに"user_message_prompt"というキーで渡した内容がテキストフィールド上部に表示されています。
投稿(ダイアログなし)
ダイアログを出さず、アプリが決めたテキストを投稿する場合は下記のようになります。
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: @"this is auto post", @"message", nil]; [facebook requestWithMethodName:@"stream.publish" andParams:params andHttpMethod:@"POST" andDelegate:self];
こちらを実行すると、
こんな感じで投稿されます。
2011-02-23
カメラアプリにFacebookへの写真投稿機能をつける
作ったアプリ, iPhone, Objective-C, Facebook, API
1年前に作った「頭身カメラ」というアプリに、
Facebookへの投稿機能をつけてみました。
(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スキームでアプリに戻ってきます。
そのための設定。
- Info.plistに項目を追加。
- keyの"Information Property List"の下に"URL types"を追加
- 続いて"URL types" > "Item0" > "URL Schemes" > "Item0"、なければこのように追加していく
- 最後の"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が用意されてるので簡単ですね。
サンプルコードは週末にアップする予定です。










