スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

iOS向けFacebook SDK利用方法

目標


Facebookの友達リストを参照したiOSアプリを作成


はじめに


FacebookのSDKを利用したiOSアプリを作成しようと思い調べてみた。
必要十分な情報は下記に書いてある。
https://developers.facebook.com/docs/ios/getting-started/jp
実際にやってみたら非常に簡単に簡単に実装できたが、いくつか注意すべき点に出くわした。
そこでこの記事では特に注意すべき点をまとめる。

手順


1. xcodeのインストール


省略(こちらを参照)

2. SDKのインストール


省略(こちらを参照)

3. サンプルを実行


今回は「facebookの友達リストを参照」したいので"FriendPickerSample"を利用してみます。
サンプルは2でインストールしたSDKのSamplesフォルダにはいっています。
下記はFBViewController.mのコードです。
特に難しい部分はないと思います。
#import "FPViewController.h"

#import "FPAppDelegate.h"

// FBSample logic
// We need to handle some of the UX events related to friend selection, and so we declare
// that we implement the FBFriendPickerDelegate here; the delegate lets us filter the view
// as well as handle selection events
@interface FPViewController ()

@property (strong, nonatomic) IBOutlet UITextView *selectedFriendsView;
@property (retain, nonatomic) FBFriendPickerViewController *friendPickerController;

- (void)fillTextBoxAndDismiss:(NSString *)text;

@end

@implementation FPViewController

#pragma mark View lifecycle

- (void)viewDidLoad {
[super viewDidLoad];
}

- (void)viewDidUnload {
self.selectedFriendsView = nil;
self.friendPickerController = nil;

[super viewDidUnload];
}

#pragma mark UI handlers

- (IBAction)pickFriendsButtonClick:(id)sender {
// FBSample logic
// if the session is open, then load the data for our view controller
if (!FBSession.activeSession.isOpen) {
// if the session is closed, then we open it here, and establish a handler for state changes
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
if (error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
} else if (session.isOpen) {
[self pickFriendsButtonClick:sender];
}
}];
return;
}

if (self.friendPickerController == nil) {
// Create friend picker, and get data loaded into it.
self.friendPickerController = [[FBFriendPickerViewController alloc] init];
self.friendPickerController.title = @"Pick Friends";
self.friendPickerController.delegate = self;
}

[self.friendPickerController loadData];
[self.friendPickerController clearSelection];

[self presentViewController:self.friendPickerController animated:YES completion:nil];
}

- (void)facebookViewControllerDoneWasPressed:(id)sender {
NSMutableString *text = [[NSMutableString alloc] init];
// we pick up the users from the selection, and create a string that we use to update the text view
// at the bottom of the display; note that self.selection is a property inherited from our base class
for (id user in self.friendPickerController.selection) {
if ([text length]) {
[text appendString:@", "];
}
[text appendString:user.name];
}

[self fillTextBoxAndDismiss:text.length > 0 ? text : @""];
}

- (void)facebookViewControllerCancelWasPressed:(id)sender {
[self fillTextBoxAndDismiss:@""];
}

- (void)fillTextBoxAndDismiss:(NSString *)text {
self.selectedFriendsView.text = text;

[self dismissViewControllerAnimated:YES completion:NULL];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
return YES;
}

#pragma mark -

@end


4. facebookアプリを登録


詳しくはこちらを参照していただきたい。
言われるがままに進めれば完了するのだがそれぞれの意味は下記のような感じ。
i) facebookアプリを作成(iOSアプリを作成するのだが、そのアプリをfacebook側で管理する為の登録)
ii) facebookにbunndle IDを登録(iOSアプリ側の情報をfacebook側に提供)
iii) facebookアプリIDと名称をxcodeプロジェクトに登録(facebookアプリ側の情報をiOSアプリ側に提供)【次項で実施】

5. xcodeプロジェクトを作成


詳しくはこちらを参照していただきたい。

下記のような記載があるが、「AdSupport、Accounts、libsqlite3、Security、Social」はとりあえず全部追加しておけば良い。

iOS6に搭載されたFacebook機能を使用する際、SDKは他の5つのフレームワークとライブラリ(AdSupport、Accounts、libsqlite3、Security、Social)に依存します。これらのフレームワークを追加するには、TARGETSの[Summary]ペインの[Linked Frameworks and Libraries]セクションに移動し、+ボタンを押します。

4の(iii)で触れたのは「FacebookアプリIDと表示名の追加」というパートです。


6. コードを書く


さてここからが本題です。
サンプルのプログラムを元に「Facebookの友達リストを参照したiOSアプリを作成」したいと思います。

と、その前にチェックリスト。下記を確認してから進んで下さい。

□ 新規xcodeプロジェクトを作成し、今からそのプロジェクトにコードを書いていく(上記5)
□ 新規xcodeプロジェクトに必要なframeworkを全て追加した(上記5)
□ facebookアプリを登録済み。iOSアプリ側のbunndleIDも登録済み。(上記4)
□ facebookアプリのID/表示名をxcodeのplistに追加した(上記5)


上記を終えた上で、下記のように書いてみた。


ViewController.h
#import 
#import

@interface ViewController : UIViewController

@end


ViewController.m
#import "ViewController.h"

@interface ViewController (){
FBFriendPickerViewController *friendPickerController;
}
@end

@implementation ViewController

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self pickFriendsButtonClick];
}

- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}

#pragma mark UI handlers
- (void)pickFriendsButtonClick{
// FBSample logic
// if the session is open, then load the data for our view controller
if (!FBSession.activeSession.isOpen) {
// if the session is closed, then we open it here, and establish a handler for state changes
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
if (error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
} else if (session.isOpen) {
[self pickFriendsButtonClick];
}
}];
return;
}

if (friendPickerController == nil) {
// Create friend picker, and get data loaded into it.
friendPickerController = [[FBFriendPickerViewController alloc] init];
friendPickerController.title = @"Pick Friends";
friendPickerController.delegate = self;
}

[friendPickerController loadData];
[friendPickerController clearSelection];

[self presentViewController:friendPickerController animated:YES completion:nil];
}

- (void)facebookViewControllerDoneWasPressed:(id)sender {
NSMutableString *text = [[NSMutableString alloc] init];

NSLog(@"hello");
// we pick up the users from the selection, and create a string that we use to update the text view
// at the bottom of the display; note that self.selection is a property inherited from our base class
for (id user in friendPickerController.selection) {
if ([text length]) {
[text appendString:@", "];
}
[text appendString:user.name];
}

[self fillTextBoxAndDismiss:text.length > 0 ? text : @""];
}

- (void)facebookViewControllerCancelWasPressed:(id)sender {
[self fillTextBoxAndDismiss:@""];
}

- (void)fillTextBoxAndDismiss:(NSString *)text {
NSLog(@"%@を選択しました",text);
[self dismissViewControllerAnimated:YES completion:NULL];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
return YES;
}

#pragma mark -


@end



実行結果:
すべて順調に行けばまずアプリからfacebookへのアクセス許可を確認するメッセージが表示される。


これを許可すれば友達の一覧が表示され、選択した名前がコンソールに表示されるはずだ。
ただ、いくつかの場合下記のようなメッセージが表示されることがある。

The operation couldn't be completed. (com.facebook.sdk error 2.)


このとき疑うべきは上記のチェックリストを全て満たしているかという事プラス、facebookアプリの設定だ。


Advanceの項目の下の方にSDKに関する設定"Allow SDK to send SDK data to Insights"がある。
ここをYesに設定すればエラーがとれる、かも知れない。
(当方のアプリは上図の設定で上手く動作しています)


まとめ


facebookのSDKを利用したiOSアプリは上記のように簡単に実装できるのだが、一番最後の記載にもあるエラーがでて立ち往生した。この辺りは慣れな気もする。
まだ試したばかりなので今後困る所が出て来たら追記したいと思います。





[PR]


コメント

コメントの投稿

非公開コメント

PR

PR

プロフィール

何でも書くman

Author:何でも書くman
思ったことや備忘録など、とりあえずなんでも書きます。IT系のことや趣味、生活に関わることなども。

ページの先頭へ戻る
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。