StackOverflow에서 여러 답변을 제공하는 한 자습서 및 설명서에 따라 Android App usign Facebook SDK에 로그인 흐름을 구현하고 있습니다.안드로이드 용 페이스 북용 SDK가 전자 메일 허가를 요청하지 않습니다.
"LoginButton"이 아닌 Button에 UserRegistrationActivity가 있습니다. 나는 올바른 권한 (basic_info, email)을 요구하고 있다고 생각한다. 사용 권한을 묻는 페이스 북 대화 상자가 표시되지만 이메일이 나열되지 않아 내 access_token을 받으면 사용자 이메일 서버 측에 액세스 할 수 없습니다.
내 코드 :
package com.test.user;
import java.util.Arrays;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.IntentSender.SendIntentException;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
import com.facebook.Session;
import com.facebook.SessionState;
import com.test.user.domain.User;
import com.test.user.services.UserLoginService;
public class UserRegistrationActivity extends SherlockActivity implements OnClickListener,ConnectionCallbacks,
OnConnectionFailedListener {
private static final String TAG = "UserRegistrationActivity";
private static final int REQUEST_CODE_RESOLVE_ERR = 9000;
private ProgressDialog mConnectionProgressDialog;
private PlusClient mPlusClient;
private ConnectionResult mConnectionResult;
private Session session;
private Session.StatusCallback statusCallback =
new SessionStatusCallback();
SharedPreferences settings;
UserRegistrationActivity _activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_user_registration);
settings = getSharedPreferences(TestApplication.PREFS_NAME, 0);
setupActionBar();
_activity = this;
}
public void onClickLogin(View v) {
getSherlock().setProgressBarIndeterminateVisibility(true);
Session session = Session.getActiveSession();
if (session != null && !session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setPermissions(Arrays.asList("basic_info","email"))
.setCallback(statusCallback));
} else {
Session.openActiveSession(this, true, statusCallback);
}
}
@Override
protected void onResume() {
super.onResume();
}
private void setupActionBar() {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater();
inflater.inflate(R.menu.user_registration, (com.actionbarsherlock.view.Menu) menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onDisconnected() {
Log.d(TAG, "disconnected");
}
@Override
protected void onActivityResult(int requestCode, int responseCode, Intent intent) {
if(requestCode == 2){
if(responseCode ==RESULT_OK){
if(intent.getExtras().containsKey("user_id")){
String userId = intent.getExtras().getString("user_id");
Intent returnIntent = new Intent();
returnIntent.putExtra("user_id", userId);
setResult(RESULT_OK,returnIntent);
getSherlock().setProgressBarIndeterminateVisibility(true);
finish();
}else{
getSherlock().setProgressBarIndeterminateVisibility(true);
}
}
}else{
Session.getActiveSession().onActivityResult(this, requestCode, responseCode, intent);
}
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(!TextUtils.isEmpty(session.getAccessToken())){
SharedPreferences.Editor editor = settings.edit();
editor.putString("user_token","@[email protected]:"+session.getAccessToken());
editor.putString("user_token_type","FACEBOOK");
// Commit the edits!
editor.commit();
new UserLoginService(_activity).execute("@[email protected]:"+session.getAccessToken());
}
}
}
public void onResultFromAsyncTask(User result) {
if(result!=null){
Intent returnIntent = new Intent();
returnIntent.putExtra("user_id", result.getId());
setResult(RESULT_OK,returnIntent);
getSherlock().setProgressBarIndeterminateVisibility(true);
finish();
}
}
}
고맙습니다! 당신의 대답이 효과가있었습니다. – Ejmedina