2

ユーザーが自分のアプリの投稿を Facebook に自動的に公開することを選択できる設定に取り組んでいます。

この例を見つけました: https://github.com/fbsamples/android-3.0-howtos/blob/master/PublishFeedHowTo/src/com/facebook/samples/publishfeedhowto/MainFragment.java

しかし、この機能は私のアプリの設定であるため、別の別のアクティビティで発生する実際の「公開リクエストの作成」から「許可を許可する」ロジックを分離する必要があります。

一見したところ、以下のコードのチャンクを切り取って自分のアクティビティに貼り付けることができ、ユーザーが Facebook で既にログインしていると仮定すると機能すると思いましたが、どうやら uihelpers と Session.StatusCallback も実装する必要があるようです。アクセス許可を要求する設定アクティビティに実装する必要がある追加のコード (以下のロジック以外) は何ですか?

    private void publishStory() {
        Session session = Session.getActiveSession();
        if (session != null) {

            // Check for publish permissions    
            List<String> permissions = session.getPermissions();
                if (!isSubsetOf(PERMISSIONS, permissions)) {
                    pendingPublishReauthorization = true;
                    Session.NewPermissionsRequest newPermissionsRequest = new Session
                            .NewPermissionsRequest(this, PERMISSIONS);
                    session.requestNewPublishPermissions(newPermissionsRequest);
                    return;
               }

        }
    }

    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
        for (String string : subset) {
            if (!superset.contains(string)) {
                return false;
            }
        }
        return true;
    }

}
4

1 に答える 1

2

Ming Li がコメントで指摘しているように、実装する必要はありませんがuihelpers、さらに以下が必要になります。

埋め込むStatusCallback

private Session.StatusCallback statusCallback = new SessionStatusCallback();

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(final Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {
            switch (state) {
                case OPENED_TOKEN_UPDATED:
                    publishStory(); // Comes here after the  new permissions are requested
                    break;
            }
        }
    }
}

埋め込むonActivityResult()

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

コードを追加して実際の作業を行うpublishStory()

private void publishStory() {
    Session session = Session.getActiveSession();
    if (session != null) {

        // Check for publish permissions    
        List<String> permissions = session.getPermissions();
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);
                return;
           }

        // Do the real work here
        ...
    }
}
于 2014-08-09T12:26:14.333 に答える