2014-02-14 4 views
0


안드로이드 애플 리케이션을 페이스 북 응용 프로그램과 통합했는데, 지금까지 그랬지만 로그인 할 때 추가 권한없이
누군가 나에게 일반적인 지침을 줄 수 있습니까?더 많은 권한을 페이스 북에 추가합니다. LoginButton

public abstract class FacebookActivity extends Activity { 
    // Class variables 
    protected GraphUser mFacebookUser; 
    protected UiLifecycleHelper mUiHelper; 
    protected SessionState mSessionState; 
    protected Session mSession; 

    protected Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    protected FacebookDialog.Callback dialogCallback = new FacebookDialog.Callback() { 
     @Override 
     public void onError(FacebookDialog.PendingCall pendingCall, 
       Exception error, Bundle data) { 
      Log.d("FacebookActivity", 
        String.format("Error: %s", error.toString())); 
     } 

     @Override 
     public void onComplete(FacebookDialog.PendingCall pendingCall, 
       Bundle data) { 
      Log.d("FacebookActivity", "Success!"); 
     } 
    }; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     initFacebookUser(savedInstanceState); 
     mUiHelper = new UiLifecycleHelper(this, callback); 
     mUiHelper.onCreate(savedInstanceState); 
     setContentView(setActivityLayout()); 
     InitiateUIComponents(savedInstanceState); 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     mUiHelper.onResume(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     mUiHelper.onSaveInstanceState(outState); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     mUiHelper.onActivityResult(requestCode, resultCode, data, 
       dialogCallback); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     mUiHelper.onPause(); 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     mUiHelper.onDestroy(); 
    } 

    protected void onSessionStateChange(Session session, SessionState state, 
      Exception exception) { 
     this.mSessionState = state; 
     this.mSession = session; 
    } 

    private void initFacebookUser(Bundle bundle) { 
     if (mFacebookUser == null) { 
      GetUserAsync task = new GetUserAsync(); 
      task.execute(new Bundle[] { bundle }); 
     } 
    } 

    protected void postStatusUpdate(String message) { 
     if (mFacebookUser != null && hasPublishPermission()) { 
      Request request = Request.newStatusUpdateRequest(
        Session.getActiveSession(), message, null, null, 
        new Request.Callback() { 
         @Override 
         public void onCompleted(Response response) { 
          doOnStatusUpdate(response.getGraphObject(), 
            response.getError()); 
         } 
        }); 
      request.executeAsync(); 
     } 
    } 

    protected boolean hasPublishPermission() { 
     Session session = Session.getActiveSession(); 
     return session != null 
       && session.getPermissions().contains("publish_actions"); 
    } 

    public GraphUser getFacebookUser(Bundle bundle) { 
     // Method variables 
     Session session; 
     Request request; 
     Response response; 
     GraphUser sessionUser; 

     session = Session.getActiveSession(); 

     // If the session is null try and create a new session 
     if (session == null) { 
      if (bundle != null) { 
       session = Session.restoreSession(this, null, callback, bundle); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
       session.openForRead(new Session.OpenRequest(this) 
         .setCallback(callback)); 
      } 
     } 

     request = new Request(session, "me", null, HttpMethod.GET); 
     response = request.executeAndWait(); 
     if (response.getError() != null) { 
      // bla bla 
     } else { 
      sessionUser = response.getGraphObjectAs(GraphUser.class); 
      if (sessionUser != null) { 
       return sessionUser; 
      } 
     } 

     // If no user has been fetched 
     return null; 
    } 

    /** 
    * This method is used to set the activity layout to use simply return the 
    * layout resource id (as R.layout.layout_resouce_id) 
    * 
    * @return The address to the layout resource id 
    */ 
    protected abstract int setActivityLayout(); 

    /** 
    * This method injects the instantiation of the UI components to the built 
    * in Android onCreate activity 
    */ 
    protected abstract void InitiateUIComponents(Bundle bundle); 

    /** 
    * This method handle the action to be taken after a status update (toast, 
    * notify, etc.) In order to do nothing simply leave it empty Note - The 
    * given parameters are simply passed on runtime 
    * 
    * @param result 
    *   - The post request result 
    * @param error 
    *   - The facebook request error 
    */ 
    protected abstract void doOnStatusUpdate(GraphObject result, 
      FacebookRequestError error); 

    private class GetUserAsync extends AsyncTask<Bundle, Void, Void> { 

     @Override 
     protected Void doInBackground(Bundle... bundle) { 
      mFacebookUser = getFacebookUser(bundle[0]); 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void input) { 

     } 
    } 
} 


클래스 나 페이스 북을 사용하여 사용자를 등록하는 데 사용하고 - -
메인 클래스는 페이스 북의 활동에 관련된 모든 작업을 처리 할 수 ​​- 내가 그렇게하는 데 사용되는 클래스를 추가

public class ActivityRegister extends FacebookActivity { 

    // Class variables 
    private String name; 
    private String email; 
    private String password; 
    private EditText editTextName; 
    private EditText editTextEmail; 
    private EditText editTextPassword; 
    private Intent intent; 
    private UserFunctions user; 
    private Button btnRegister; 
    private LoginButton loginButton; 
    private boolean isValid; 

    @Override 
    protected int setActivityLayout() { 
     return R.layout.activity_register_screen; 
    } 

    /** 
    * A method to validate user given details 
    * 
    * @return True in case all the details are ok false otherwise 
    */ 
    private boolean validateUserDetails(String name, String email, 
      String password) { 
     return false; 
    } 

    @Override 
    protected void doOnStatusUpdate(GraphObject result, 
      FacebookRequestError error) { 

    } 

    @Override 
    protected void InitiateUIComponents(Bundle bundle) { 
     user = new UserFunctions(); 
     btnRegister = (Button) findViewById(R.id.registerBtnRegister); 
     btnRegister.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // get the data out of the fields 
       editTextName = (EditText) findViewById(R.id.registerName); 
       editTextEmail = (EditText) findViewById(R.id.registerEmail); 
       editTextPassword = (EditText) findViewById(R.id.registerPassword); 

       // get the text out of the edit text objects 
       name = editTextName.getText().toString(); 
       email = editTextEmail.getText().toString(); 
       password = editTextPassword.getText().toString(); 
       isValid = validateUserDetails(name, email, password); 
       if (isValid) { 
        user.RegisterUser(name, name, email, password); 
       } else { 
        gotoNextScreen(); 
       } 
      } 
     }); 

     loginButton = (LoginButton) findViewById(R.id.facebook_login_button); 
     loginButton.setReadPermissions(Arrays.asList("publish_actions")); 
     loginButton 
       .setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() { 
        @Override 
        public void onUserInfoFetched(GraphUser user) { 
         ActivityRegister.this.mFacebookUser = user; 
         if (mFacebookUser != null) { 
          gotoNextScreen(); 
         } 
        } 
       }); 
    } 

    private void gotoNextScreen() { 
     intent = new Intent(ActivityRegister.this, ActivityUUID.class); 
     startActivity(intent); 
     finish(); 
    } 

} 


나는 ... 0 그들은 단지 내 응용 프로그램 충돌하는 것 facebbok loginbutton 위젯
에 좀 더 많은 권한을 추가로 관련 스레드를 발견 않았다내가 사전에 페이스 북 SDK 버전 3.6
TNX을 사용하고 있습니다

편집 :
내가 다음 교체하여 사용 권한을 게시 추가 관리 -() "publish_actions"(Arrays.asList를)
loginButton.setReadPermissions을 ;
by
loginButton.setPublishPermissions (Arrays.asList ("publish_actions"));

문제는 현재 활성 사용자를 얻지 못했습니다 (해당 선을 제거하면 앱 조건에 동의 한 후 사용자를 얻지 만 GraphUser를 null로 추가하면 문제가 생깁니다).

답변

0

나는 publish_actions없이 로그인 버튼을 사용하여 동일한 문제가 발생했습니다. 이 파마가 필요하면 재검사 세션이 있는지 여부. 그렇지 않다면 나는 나의 세션에서 새로운 파마를 요청했다.

+0

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남기십시오. 자신의 게시물에 언제나 댓글을 달 수 있으며 충분한 [평판] (http://stackoverflow.com/help/whats-reputation)을 갖게되면 [모든 게시물에 댓글을 달 수] 있어야합니다 (http://stackoverflow.com/help/privileges/comment). – Ayush

+1

반대로 이것은 실제로 문제에 대한 해결책을 설명하는 것으로 보입니다. "나는 똑같은 문제가있다"로 시작하는 모든 대답이 나쁘지는 않습니다 - 현실적으로, 많은 해결책은 ** 같은 문제를 직면하고 ** 극복 한 사람들에게서 나올 것입니다. –

+0

회신에 대해 미안하지만 그를 위해 내 솔루션을 가져올 수 있습니다. 아마도 좋지는 않지만 단지 내 대답으로 해결할 수있는 유일한 방법을 알고 있습니다. –

관련 문제