2013-05-02 4 views
10

Я использую restfb API для доступа к фотографиям моего друга на Java. И чтобы получить доступ к этим фотографиям, я генерирую код доступа вручную с помощью Graph API explorer и передаю его как параметр для вызова API restfb.Как получить токен доступа пользователя facebook в android?

Но теперь я хочу сгенерировать этот токен доступа через код (программно). Я видел fb android образцы, особенно hackbook. Я не вижу никакого кода доступа, который я могу использовать для моего собственного приложения. Мне нужно создать новое приложение и получить секрет и т. Д.? Любое предложение будет оценено по достоинству.

Я видел эти решения (solution-1 & solution-2) в stackoverflow, но я все еще не понимаю, с чего начать?

Update-1 ::

Я использую следующий код для входа в систему и получить маркер доступа для зарегистрированного пользователя. Но проблема в том, что он работает только для учетной записи, с которой я создал приложение на facebook для создания app_id. Он не получает обратный звонок для других учетных записей. Любое предложение пожалуйста.

И на всякий случай, если вы не знаете, с чего начать, следуйте step-6, чтобы создать новое приложение с нуля.

public class MainActivity extends Activity implements OnClickListener { 

    Button login; 
    TextView accessToken; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     login = (Button) findViewById(R.id.login); 
     accessToken = (TextView) findViewById(R.id.accessToken); 

     login.setOnClickListener(this); 
     // start Facebook Login 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

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

    @Override 
    public void onResume() 
    { 
     Session session = Session.getActiveSession(); 
     if(session != null) 
      if (session.isOpened()) { 
       //Toast.makeText(this, session.getAccessToken(), Toast.LENGTH_LONG).show(); 
       accessToken = (TextView) findViewById(R.id.accessToken); 
       accessToken.setText(session.getAccessToken()); 
       System.out.println("----------------------" + session.getAccessToken() + "---------------------"); 

      } 
     super.onResume(); 
    } 

    @Override 
    public void onClick(View v) { 
     // start Facebook Login 
     Session.openActiveSession(this, true, new Session.StatusCallback() { 

      // callback when session changes state 
      @Override 
      public void call(Session session, SessionState state, 
        Exception exception) { 
       if (session.isOpened()) { 

        // make request to the /me API 
        Request.executeMeRequestAsync(session, 
          new Request.GraphUserCallback() { 

           // callback after Graph API response with user 
           // object 
           @Override 
           public void onCompleted(GraphUser user, 
             Response response) { 
            if (user != null) { 
             TextView welcome = (TextView) findViewById(R.id.welcome); 
             welcome.setText("Hello " 
               + user.getName() + "!"); 
            } 
           } 
          }); 
       } 
      } 
     }); 

    } 

    } 

ответ

0

Ответ на оригинальный вопрос уже введен как update-1. Но он работал только для пользователей admin.

Фактически во время создания приложения я неправильно выбрал режим «песочницы», который ограничивает доступ приложений только к разработчикам, добавленным на странице конфигурации приложения. Поэтому после отключения этого режима я смог создать токен доступа для других пользователей.

8

с помощью facebook SDK лучший способ для управления аутентификацией пользователя является посредством Session класса. Если у вас есть действительный экземпляр класса Session, вам просто нужно называть его getAccessToken(), чтобы получить строку, представляющую токен доступа.

Session session = Session.getActiveSession(); 
if (session != null && session.getState().isOpened()){ 
    Log.i("sessionToken", session.getAccessToken()); 
    Log.i("sessionTokenDueDate", session.getExpirationDate().toLocaleString()); 
} 
+0

спасибо за ответ, я не позволил создать объект сессии. Пожалуйста, дайте мне знать, почему это происходит! – TharakaNirmana

+0

На самом деле вам не нужно создавать новый экземпляр сеанса, просто используйте метод getActiveSession() 'или' openActiveSession() ', если вы получите нулевой сеанс из предыдущего. Относительно этого см. Также [мой другой ответ] (http://stackoverflow.com/questions/16140771/login-with-facebook-android-sdk-3-0-using-shared-preferences-session/16143102#16143102) – 5agado

+0

Спасибо, что ответили, моя ситуация немного странная. У меня есть объект facebook (Facebook facebook = new Facebook()). Но с этим объектом я не могу вызвать facebook.getActiveSession() или facebook.openActiveSession(). Может, пожалуйста, скажите мне, почему? Мое намерение состоит в том, чтобы каким-то образом создать токен доступа и отправить его с параметрами (в комплекте) для загрузки фотографии. – TharakaNirmana

1

GET/oauth/access_token? client_id = {приложение-ID} & client_secret = {приложение секретная} & grant_type = client_credentials

8

У меня была та же проблема, с использованием новейших Facebook Android SDK (4.0.1).

Я использовал AccessToken.getCurrentAccessToken(), и она работала:

GraphRequest request = GraphRequest.newMeRequest(
      AccessToken.getCurrentAccessToken(), 
      new GraphRequest.GraphJSONObjectCallback() { 
       @Override 
       public void onCompleted(JSONObject jsonObject, GraphResponse response) { 
        Log.d(LOG_TAG,"onCompleted jsonObject: "+jsonObject); 
        Log.d(LOG_TAG,"onCompleted response: "+response); 
        // Application code 
       } 
      }); 
    Bundle parameters = new Bundle(); 
    parameters.putString("fields", "id,name,link,cover,email"); 
    request.setParameters(parameters); 
    request.executeAsync(); 
+0

Можете ли вы опубликовать весь код своей деятельности, содержащий вышеуказанный код. Я смущен тем, где поставить свой код, попробовал вставить внутри onCreate, но ничего не помогло. –

+0

Я также использую sdk 4.0.1 & android studio 1.1.0. –

+0

Работает отлично !!! Большое спасибо sdk 4.5 –

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