2015年5月17日日曜日

Facebook SDK for iOS 4.0 に悩まされる

今回は、Facebook SDK for iOS を使用して、タイムラインにメッセージを投稿する方法を調べてみました。

使う方法を書く前に、苛立ちを少々書かせてください。

まず、バージョンがややこしい。
Developers のページをみると、現在?の SDK のバージョンが v3.18 と書かれています。しかし、更新履歴のページに行くと、v3.23.2 となっています。
さらに、もう一つ Changelog があり、そちらを見ると、v4.0.1 がでてきます。
また、github にもリポジトリがあり、こちらは 4.0.1 が最新となっています。

Developers の Facebook SDK for iOS ページ
https://developers.facebook.com/docs/ios?locale=ja_JP

Developers の Facebook SDK for iOS の更新履歴のページ
https://developers.facebook.com/docs/ios/change-log-3.x/

Developers の Facebook SDK for iOS のもう一つの更新履歴のページ
https://developers.facebook.com/docs/ios/change-log-4.x

github の Facebook SDK for iOS ページ
https://github.com/facebook/facebook-ios-sdk

次に、バージョン 3 系と、4 系ではメソッドが変わっている。。。
Web で使い方の参考を拝見させて頂くにしても、みなさん 3 系の方法で書いているために、最新の 4 系では、過去の資産が活かせないということになる。
そして、4 系のサンプルはあまりない。

まあ、要するにハッキリ言うと Facebook SDK って、クソ難し過ぎませんか!!ってことです。

と、毒ついたところで、タイムラインへの投稿までの手順を書いておきます。

断りとしては、この方法では一旦 Safari が起動してログイン認証した後、メッセージを送るときも Safari が起動してメッセージを投稿するという、 UI としていかがなものか?という内容になることをご了承願います。

1. Facebook SDK for iOS を導入する

まずは、Facebook SDK を入手します。
入手場所は、Developer のページまたは、github からの入手でも構いませんが、CocoaPods を使用するのが簡単だと思います。

まずは、Xcode で確認用のプロジェクトを作成。
つぎに、プロジェクトのフォルダに Podfile を作成して、以下を記述。

    pod 'Facebook-iOS-SDK'

ターミナルで、Podfile の場所まで移動して、pod install で導入を行います。
導入のバージョンを指定していないので最新の 4.0.1 が導入されます。

次に、Developer のページで動作するアプリを登録します。
アプリを登録することによって、アプリの ID を取得することが出来ます。
このアプリの ID は、iPhone アプリでの設定に必要です。

次に、Xcode で Supporting Files フォルダにある xxx.plist に必要項目を追加します。
- FacebookAppID : Facebook アプリのID
- FacebookDisplayName : Facebook アプリ名
- URL types > item 0 > URLSchemes > item0 : fb + Facebook アプリID


2. 投稿用のボタンを作成してコードを割り付ける

ここまで来ると、もう 8 割がた終わっています。
Developer のチュートリアルのページだと、導入後は AppDelegate.m へのメソッドの追記などが書かれていますが、メッセージをポストするだけだと特に記述がいらない?みたいです。
細かな制御を行う場合には、記述が必要になるので、必要になったら追って確認するようにします。

さて、実際の方法ですが、まずは、storyboard にボタンを配置して、action を追加します。そして、追加したアクションに以下の記述をします。
FBSDKShareDialog の withContent に何か値を渡さないと実行時エラーになるので FBSDKShareLinkConten のインスタンスを渡しています。正直この方法もいかがなものか?と思っています。

        FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
        [FBSDKShareDialog showFromViewController:self
                                     withContent:content
                                        delegate:nil];    

3. 動作の確認

後は、動作の確認です。
シミュレータでもよいので、起動してボタンを押すと Safari が起動して Facebook のログイン画面が起動します。
ログインが成功すると、次にメッセージを入力する画面が起動します。
ここで、文字を入力して Share ボタンを押すと、自分のタイムラインに投稿が行われています。
そして、アプリの画面に自動的に戻ります。


4. 一応のログアウト

ログアウトは、今回の場合ではアプリ側でログアウトを行う方法はなく、アプリ終了や、Home ボタンを押してバックグラウンドに回した後に、 Safari を起動して Facebook へアクセスし、ログアウトを行う手順をとります。


ね、イケてないでしょ

すみません。
ハッキリ言ってこの方法では、メッセージを送るたびに Safari が起動して投稿したとアプリに戻るという、いったりきたりの面倒くさいアプリとなってしまいます。いちいち切り替えを行わなくて良い方法を探してみたいと思いますが、なんせわかりにくい。。。

たかが、ログインして、メッセージを投稿して、たまにログアウトしたいだけなのに、独自の方法を使おうとすると、なんでこうも難しいのか。

それとも、自分がポイントを押さえていないだけなのだろうか?
追記:
Graph API ってのを使えば行けるのか(?)、あとで調べてみる。

Written with StackEdit.

1 件のコメント:

  1. こんな感じにすればいいと思いますよ

    FBSDKShareLinkContent *content = [FBSDKShareLinkContent new];
    content.contentURL = [NSURL URLWithString:@"http://google.com"];
    content.contentTitle = @"Test Post!";
    content.contentDescription = @"Content Description";

    [[FBSDKShareAPI shareWithContent:content delegate:self] share];

    返信削除