拡張権限を要求する必要がある場合は、こちらのガイドに従うことができます。投稿から:
まず、必要な権限を定義しましょう
// List of additional write permissions being requested
private static final List<String> PERMISSIONS = Arrays.asList("publish_stream, publish_actions");
// Request code for reauthorization requests.
private static final int REAUTH_ACTIVITY_CODE = 100;
// Flag to represent if we are waiting for extended permissions
private boolean pendingAnnounce = false;
まず、必要なすべての権限があるかどうかを確認します。そうでない場合は、要求している一連の権限を使用して新しいReauthorizeRequestを作成します。これにより、アプリ外のユーザーがFacebookアプリまたはブラウザーに誘導され、権限が確認されます。ユーザーがリクエストを確認すると、アプリケーションにリダイレクトされ、再承認リクエストを呼び出したアクティビティのonActivityResultが呼び出されます。
private void handleAnnounce() {
pendingAnnounce = false;
Session session = Session.getActiveSession();
if (session == null || !session.isOpened()) {
return;
}
List<String> permissions = session.getPermissions();
if (!permissions.containsAll(PERMISSIONS)) {
pendingAnnounce = true; // Mark that we are currently waiting for confirmation of publish permissions
session.addCallback(this);
requestPublishPermissions(this, session, PERMISSIONS, REAUTH_ACTIVITY_CODE);
return;
}
// TODO: Publish the post. You would need to implement this method to actually post something
publishMessage();
}
void requestPublishPermissions(Activity activity, Session session, List<String> permissions,
int requestCode) {
if (session != null) {
Session.ReauthorizeRequest reauthRequest = new Session.ReauthorizeRequest(activity, permissions)
.setRequestCode(requestCode);
session.reauthorizeForPublish(reauthRequest);
}
}
これにより結果が処理され、セッション状態が変更された場合はonSessionStateChangedが呼び出されます。次に、トークンが正常に更新されたかどうかをそのメソッドでチェックインし、メッセージの公開を再試行します。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REAUTH_ACTIVITY_CODE:
Session session = Session.getActiveSession();
if (session != null) {
session.onActivityResult(this, requestCode, resultCode, data);
}
break;
}
}
protected void onSessionStateChange(final Session session, SessionState state, Exception exception) {
if (session != null && session.isOpened()) {
if (state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
// Session updated with new permissions
// so try publishing once more.
tokenUpdated();
}
}
}
/**
* Called when additional permission request is copmleted successfuly.
*/
private void tokenUpdated() {
// Check if a publish action is in progress
// awaiting a successful reauthorization
if (pendingAnnounce) {
// Publish the action
handleAnnounce();
}
}