2014-02-14 3 views
0


Im интегрируя приложение Android в приложение facebook, до сих пор мне удалось это сделать, но
без дополнительных разрешений (при регистрации) может кто-нибудь дать мне общее руководство?
Im добавляя классы, которые я использовал, чтобы сделать это -
Основной класс для выполнения всех действий, связанных на facebook деятельности -Добавление дополнительных разрешений для facebook 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) { 

     } 
    } 
} 


Класс Я использую для регистрации пользователя с помощью Facebook -

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(); 
    } 

} 


Я нашел нить, связанную с добавлением еще несколько разрешений на facebbok loginbutton виджет
они просто кажется врезаться мое приложение ...
Пожалуйста, обратите внимание, я использую Facebook SDK версии 3.6
TNX заранее

Edit:
мне удалось добавить публикацию разрешения, заменив следующие -
loginButton.setReadPermissions (Arrays.asList ("publish_actions")) ;
by
loginButton.setPublishPermissions (Arrays.asList ("publish_actions"));

Проблема в том, что я не могу получить активного пользователя (удалив эту строку, я получаю пользователя после согласования с условиями приложения, но добавив, что GraphUser остается null ..) любая помощь ??

ответ

0

У меня была такая же проблема, как и работа с кнопкой входа без публикации. Когда мне это нужно, я перепроверяю сессию или нет. Если бы я не сделал запрос new perm из моей сессии.

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). – Ayush

+1

Наоборот, это действительно объясняет решение проблемы. Не каждый ответ, который начинается с «Я тоже имел такую ​​же проблему», является плохим - реалистично, многие люди получат решения и преодолеют ту же проблему. –

+0

извините за ответ, но я приношу свое решение для него, может быть, это не хорошо, но я знаю только один способ исправить как мой ответ –

Смежные вопросы