如何获得Facebook的用户访问令牌在android中?

我正在使用restfb API来访问我的朋友在Java中的照片。 为了访问这些照片,我使用Graph API Explorer手动生成访问代码,并将其作为parameter passing给restfb API调用。

但是现在我想通过代码(编程)来生成这个访问令牌。 我看过fb android样本,特别是hackbook。 我没有看到任何访问代码正在生成,我可以用于我自己的应用程序。 我需要创build一个新的应用程序,并得到一些秘密等? 任何build议将不胜感激。

我已经看到这些解决scheme( 解决scheme1和解决scheme2 )在计算器上,但我还没有得到从哪里开始?

Update-1 ::

我正在使用以下代码login并获取login用户的访问令牌。 但问题是,它只适用于我在facebook上创build应用程序的帐户来生成app_id。 它不会收到其他帐户的回电。 任何build议请。

如果您不知道从哪里开始,请按照第6步从头创build一个新的应用程序。

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

Solutions Collecting From Web of "如何获得Facebook的用户访问令牌在android中?"

使用Facebook SDK,pipe理用户身份validation的更好方法是通过Session类。 当你有一个Session类的有效实例时,你只需要调用getAccessToken()就可以获得表示访问令牌的string。

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

我有使用最新的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(); 

GET / oauth / access_token? client_id = {app-id}&client_secret = {app-secret}&grant_type = client_credentials

原始问题的答案已经作为update-1input。 但它只是为pipe理员用户工作。

实际上,在创build应用程序时,我错误地select了“沙盒”模式,它限制了应用程序只能访问应用程序configuration页面中添加的开发者。 所以禁用此模式后,我也能够为其他用户生成访问令牌。