簡體   English   中英

要求其他的Facebook許可

[英]Ask for additional facebook permission

嘗試檢索附加權限“ publish_action”時遇到麻煩。

我假設用戶已經通過Facebook登錄,因此授予了基本權限。 然后我有以下代碼(來自我的片段):

List<String> permissionsRequested = Arrays.asList("publish_actions");
List<String> permissionsActual = session.getPermissions();
if (!isSubsetOf(permissionsRequested,  permissionsActual)) {
    pendingPublishReauthorization = true;
    Session.NewPermissionsRequest newPermissionsRequest = new Session
        .NewPermissionsRequest(this, permissionsRequested);
    session.requestNewPublishPermissions(newPermissionsRequest);
    return;
}

從調試的角度來看,在用戶授予權限后,控制權轉到了onActivityResult,根據facebook文檔,我有

super.onActivityResult(requestCode, resultCode, data);
facebookUiHelper.onActivityResult(requestCode, resultCode, data);

uiHelper也適用於所有onResume&onDestroy方法(根據文檔)。

在onCreate我有

super.onCreate(savedInstanceState);
facebookUiHelper = new UiLifecycleHelper(getActivity(), fbSessionCallback);
facebookUiHelper.onCreate(savedInstanceState);

其中fbSessionCallback具有重寫的call()方法,該方法調用了我的onFbSessionRestore()

if (pendingPublishReauthorization && 
    state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
    pendingPublishReauthorization = false;
    // do things with my new session, updated with granted permission. e.g. post to fb.
}

麻煩的是

  1. onActivityResult將執行,但是此后沒有回調被調用,因此覆蓋的call()將不會繼續,並且onFbSessionCallback也不會執行。
  2. 如果在此之后我嘗試再次發布(從頭開始),它會再次獲得未授予權限的會話,嘗試請求它,然后將Facebook異常發送給待處理的newPublishRequest權限等等

有人可以幫助從onActivityResult及更高版本配置工作流程嗎? 我閱讀了facebook文檔,並且傾向於指責他們寫得不好。 也許只是我太蠢了...:(((

這是我設置的方式:

Session session = Session.getActiveSession();
    if (session != null) {
        List<String> permissions = session.getPermissions();
        if (!permissions.contains("publish_actions")) {
            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, "publish_actions");
            session.addCallback(callbacktwo);
            session.requestNewPublishPermissions(newPermissionsRequest);
            return;
        }
    }

這在我的onActivityResult中,但不是必須的。 我以前在onCreate中使用過它。 我在請求中添加了回調,然后可以將其用於下一步。

這是我的回調:

private Session.StatusCallback callbacktwo = new Session.StatusCallback() {

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        Intent in = new Intent(getActivity(), ClassHere.class);
        startActivity(in);
    }
};

請記住,回調將響應兩次,一次是在您啟動權限請求時,是在其完成后。 因此,您必須解決該問題/將其納入代碼中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM