ドキュメント、ソース コード、およびその他の関連する質問をここで読みましたが、Facebook SDK 3 for Android を使用してアプリを承認/ログインする際にまだ問題があります。
提供されている「ログイン」ボタンを使用したくありません。
関連するコードは次のとおりです。
Activity.onCreate でセッションを開始します。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Session session = Session.getActiveSession();
mPrefs = getSharedPreferences("facebook_storage", MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (session == null) {
if (access_token != null) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", null);
editor.commit();
AccessToken accessToken = AccessToken.createFromExistingAccessToken(access_token, null, null, null, null);
session.open(accessToken, this);
} else {
session = new Session(getApplicationContext());
}
Session.setActiveSession(session);
if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
session.openForRead(new Session.OpenRequest(this).setCallback(this));
} else if (session.getState().equals(SessionState.CREATED)) {
System.out.println("Session created, no token. I guess");
session.openForRead(new Session.OpenRequest(this).setCallback(this));
}
}
これにより、次がトリガーされます。
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
次に、次のブロックをトリガーし、 at に入りif (session.isOpened())
ます:
public void call(Session session, SessionState state, Exception exception) {
// TODO Auto-generated method stub
if (session == null) {
MmfLogger.error("FacebookLogin session == null in call()");
} else if (session.isOpened()) {
System.out.println("Session.StatusCallback success: " + session.getState());
Request request = new Request(session, REQUEST_FIELDS, null, null, this);
request.executeAsync();
}
if (!session.isOpened()) {
System.out.println("session failed to open");
}
if (session.isOpened() && session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
Request request = new Request(session, REQUEST_FIELDS, null, null, this);
request.executeAsync();
} else if (session.isOpened() && session.getState().equals(SessionState.CREATED)) {
System.out.println("session isOpened and state is created");
}
}
ここから、アクティブなトークンが必要であるというエラーが表示されます。ただし、リクエストが行われる前に、トークンを確認できます。セッションには 1 つがあります。どこが間違っていますか?
お時間をいただきありがとうございます。