1

写真を送信できるように Facebook のアプリケーションを設定するにはどうすればよいですか? 私は access_token、APP_ID、および secret_id を持っていますが、このメソッドのアプリケーションを呼び出すと:

FacebookType publishPhotoResponse = facebookClient.publish("me/photos", FacebookType.class,
      BinaryAttachment.with("albumID", bs),
      Parameter.with("message", "description"));

このエラーを取得します:

com.restfb.exception.FacebookNetworkException: A network error occurred while trying to communicate with Facebook: Facebook request failed (HTTP status code null)

誰かがFacebookアプリケーションで1つずつ設定する方法を説明できますか?

4

1 に答える 1

0

拡張権限を要求する必要がある場合は、こちらのガイドに従うことができます。投稿から:

まず、必要な権限を定義しましょう

// 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();
    }
}
于 2013-01-10T09:17:49.140 に答える