9

Tôi đang theo dõi hướng dẫn chia sẻ facebook android bằng facebook (https://developers.facebook.com/docs/android/share). Các ứng dụng chạy tốt và tôi có thể đăng nhập với facebook một nhấp chuột vào nút chia sẻ demo. Vì vậy, đây là thủ tục của ứng dụng của tôi:Facebook SDK 3.8: quyền publish_actions không được trả lại

  1. Đăng nhập với facebook
  2. Đối tượng phiên facebook được cập nhật và các điều khoản sau đây được lưu trong đối tượng session: user_likes, user_friends, user_status, basic_info
  3. Bây giờ, tôi muốn chia sẻ điều gì đó. Do đó người dùng nhấp vào một nút chia sẻ và yêu cầu cho một sự cho phép bổ sung được gọi publish_actions được làm

Các mã sau thực hiện yêu cầu này:

public class MainActivity extends Activity { 

    private Button shareButton; 
    private UiLifecycleHelper uiHelper; 
    private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
    private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
    private boolean pendingPublishReauthorization = false; 

... 
    private void publishStory() { 
     Session session = Session.getActiveSession(); 
     if(session != null) { 
      List<String> permissions = session.getPermissions(); 
      if(!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS); 
//Request the new permission here. The answer is processed in onSessionStateChange() method 
       session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

... 

    private void onSessionStateChange(Session session, SessionState state, Exception exception) { 
//since the session is already open we enter this if branch 
     if (state.isOpened()) { 
      shareButton.setVisibility(View.VISIBLE); 
//The result of state.equals(SessionState.OPENED_TOKEN_UPDATED) is false which indicates that the session object has not been updated (as far as I understand the fb api) 
      Log.e(TAG, "state.equals(SessionState.OPENED_TOKEN_UPDATED) = " + state.equals(SessionState.OPENED_TOKEN_UPDATED)); 
//Output all the current permission the session has (publish_actions is not included here) 
      List<String> permissions = session.getPermissions(); 
      Iterator<String> it = permissions.iterator(); 
      Log.e(TAG, "Content of list:"); 
      while(it.hasNext()) 
       Log.e(TAG, "permission = " + it.next()); 
//Since the OPENED_TOKEN_UPDATED has not been updated nothing further happens here    
      if (pendingPublishReauthorization && state.equals(SessionState.OPENED_TOKEN_UPDATED)) { 
       pendingPublishReauthorization = false; 
       publishStory(); 
      } 
     } else if (state.isClosed()) { 
      shareButton.setVisibility(View.INVISIBLE); 
     } 
    } 

Vì vậy, mặc dù điều này có vẻ là đúng thì phải có một số lỗi còn lại. Quyền publish_actions không được cấp tuy nhiên tôi không hiểu tại sao. Chỉ các quyền hiện có vẫn là publish_actions.

Nhận xét khác: Tôi đã đọc một số câu hỏi cho biết rằng cửa sổ bật lên bổ sung sẽ xuất hiện yêu cầu người dùng cấp quyền. Tuy nhiên điều này không xảy ra trong trường hợp của tôi. Có lẽ đây là vấn đề? Nếu vậy, tôi phải làm gì để có cửa sổ bật lên?

CẬP NHẬT: Tôi cũng đã thử thêm gist sau đây từ github: https://gist.github.com/vishalpawale/5556996 Mã mẫu này không thành công do cùng một lý do chính xác. Nó không nhận được bất kỳ quyền publish_action nào. Dường như là một lỗi thực sự trong SDK Facebook?

+0

Tôi không chắc chắn, nhưng bây giờ tôi đang cố giải quyết vấn đề này. Rõ ràng Facebook đã rút khả năng xuất bản các bài đăng thông qua API. Bạn đã tìm ra được giải pháp nào chưa? – Wordica

+0

Tôi đã theo dõi developers.facebook.com/docs/android/share ví dụ để đăng lên tường của người dùng. Nó hoạt động tốt nếu tôi đăng nhập vào facebook bằng cách sử dụng email nhà phát triển ứng dụng. Với những người không phát triển, tôi không nhận được sự cho phép ... Điều đó có xảy ra với bạn không? –

+0

cùng một vấn đề, quyền publish_action không được cấp. –

Trả lời

0

nếu bạn đang sử dụng Facebook sdk 3.14.x + THN sau 30 tháng 4 facebook đã thay đổi thử nghiệm ứng dụng và quá trình nộp hồ sơ. Đã đăng câu trả lời liên quan đến quyền liên quan. kiểm tra this liên kết

0

Chúng tôi đã gặp vấn đề tương tự ở đây.

Hãy thử sử dụng:

Session.getActiveSession().refreshPermissions(); 

này sẽ cập nhật danh sách các điều khoản có sẵn trên

List<String> permissions = session.getPermissions(); 

Nó sẽ chỉ làm việc với Facebook đăng ký sử dụng các nhà phát triển hoặc người sử dụng kiểm tra đăng ký thông qua App Dashboard Facebook.

Điều này phù hợp với chúng tôi.

0

Nó chỉ trả về quyền đọc, chứ không phải quyền ghi. Hãy thử đoạn mã bên dưới

final Bundle permBundle = new Bundle(); 
    permBundle.putCharSequence("permission", "publish_actions"); 
    GraphRequest request = new GraphRequest(
      AccessToken.getCurrentAccessToken(), 
      "/me/permissions", permBundle, HttpMethod.GET, 
      new GraphRequest.Callback() { 
       @Override 
       public void onCompleted(GraphResponse graphResponse) { 
        Log.d(TAG, "response2: " + graphResponse.getJSONObject()); 
        try { 
         JSONArray permList = (JSONArray) graphResponse.getJSONObject().get("data"); 
         if(permList.length() == 0){ 
          // no data for perms, hence asking permission 
          askForFBPublishPerm(); 
         }else{ 
          JSONObject permData = (JSONObject) permList.get(0); 
          String permVal = (String) permData.get("status"); 
          if(permVal.equals("granted")){ 
           postToFB(); 
          }else{ 
           askForFBPublishPerm(); 
          } 
         } 
        } catch (JSONException e) { 
         Log.d(TAG, "exception while parsing fb check perm data" + e.toString()); 
        } 

       } 
      } 
    ); 
    request.executeAsync(); 
Các vấn đề liên quan