Facebook クラスで開かれたセッションを設定した場合、dialog() はユーザーにログインを要求しません。
次に例を示します。
public class MainActivity extends Activity {
boolean pendingShare;
Session session;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (savedInstanceState != null) {
pendingShare = savedInstanceState.getBoolean("pendingShare");
session = Session.restoreSession(this, null, new SessionCallback(), savedInstanceState);
}
((Button) findViewById(R.id.share_button)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onClickShare();
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("pendingShare", pendingShare);
Session.saveSession(session, outState);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (session != null) {
session.onActivityResult(this, requestCode, resultCode, data);
}
}
private void onClickShare() {
pendingShare = true;
session = new Session(MainActivity.this);
session.openForRead(new Session.OpenRequest(MainActivity.this).setCallback(new SessionCallback()));
}
private void share(Session session) {
Facebook facebook = new Facebook(session.getApplicationId());
facebook.setSession(session);
facebook.dialog(this, "feed", null);
pendingShare = false;
}
class SessionCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (state.isOpened() && pendingShare) {
share(session);
}
}
}
}
「pendingShare」(およびセッション) の保存/復元は、ログイン中にアクティビティをアンロードできるため、ここで役立ちます。