Pocket

 

アプリ内からFacebookへ投稿する場合について。

Facebookから提供されているsample appを参照しながら処理を盛り込んでみたのですが、
うまくいなかい部分があり、少し手を加えたのでその備忘録です。

下記ページにFacebook SDKのインストールからプロジェクトの作成までの手順が載っています。
Android用Facebook SDKスタートガイド

今回作成したのは、ログインボタンとメッセージ入力欄と投稿ボタンだけのシンプルな画面です。

facebookへの投稿画面

今回は、SDKに同梱されていたサンプルプロジェクト(HelloFacebookSample)をベースに作成してみました。
写真の投稿は不要なので削除し、またログイン処理の部分でうまくいかなかった部分はログインのドキュメントを参考にしながら処理を変更しました。

ログイン処理には、Facebookから提供されているLoginButtonクラスを使用しています。
LoginButtonクラスはセッション状態を保持しているので、ログイン/ログアウトの表示は自動で切り替わります。
ユーザから基本的なpermissionしか求めない場合には、LoginButtonクラスを設置するだけで済みます。
今回は投稿するpermission(publish_actions)が必要となるため、投稿時にユーザに許可を求める処理を追加しました。

ログイン前
ログイン前

ログインダイアログは、Facebook公式アプリがインストールされている場合とインストールされていない場合の2種類あります。

Facebook公式アプリがインストールされている場合
Facebook公式アプリのログイン画面が表示されます。
ログインダイアログ1

Facebook公式アプリがインストールされていない場合
ログインダイアログがポップアップで表示されます。
ログインダイアログ2

初めてアプリからFacebookにアクセスする際には、ログイン時にアクセス許可を求めてきます。

Facebook公式アプリがインストールされている場合
アクセス許可1

Facebook公式アプリがインストールされていない場合
なぜか右側に黒い■が表示されているのですが、不明です。。。
アクセス許可2

初めてアプリからFacebookに投稿する際には、投稿許可を求めてきます。

Facebook公式アプリがインストールされている場合
投稿許可1

Facebook公式アプリがインストールされていない場合
投稿許可2

layoutファイル

 

Facebook投稿Activity
アプリからFacebookにアクセスした後、
アプリからFacebookに再度ログインしようとしてもログインできないことがありました。
エラーログを見たところ、facebookのパスワードを変更したことが原因のようでした。
”loginButton onError:UnknownError: ApiException:Error validating access token: Session does not match current stored session. This may be because the user changed the password since the time the session was created or Facebook has changed the session for security reasons.”

Facebookのパスワードを変更した場合には、Facebook公式アプリにログイン中である場合には
一旦ログアウトしてから再度アプリからログインするとログインできました。
このような場合を考慮して、ログイン時にFacebookAuthorizationExceptionが発生した場合には
メッセージを表示するように処理を追加しました。(57行目)

 

Pocket

Comments are closed.