Android 无法通过登录Facebook获取访问令牌

Android 无法通过登录Facebook获取访问令牌,android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我在android中使用facebook登录。但我没有获得访问令牌。 我正在获取用户详细信息,如电子邮件、姓名等。 有人能告诉我为什么我没有得到代币吗 我正在使用facebook sdk 4.0.0 主要活动 public class MainActivity extends Activity { private CallbackManager callbackManager; private LoginButton loginButton;

我在android中使用facebook登录。但我没有获得访问令牌。 我正在获取用户详细信息,如电子邮件、姓名等。 有人能告诉我为什么我没有得到代币吗

我正在使用facebook sdk 4.0.0

主要活动

public class MainActivity extends     Activity {
        private CallbackManager callbackManager;
        private LoginButton loginButton;
        private TextView btnLogin;
        private ProgressDialog progressDialog;
        private AccessTokenTracker accessTokenTracker;
        private ProfileTracker profileTracker;

        private FacebookCallback<LoginResult> callback = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                AccessToken accessToken = loginResult.getAccessToken();
                String token = loginResult.getAccessToken().getToken();
                Profile profile = Profile.getCurrentProfile();
                displayMessage(profile);
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {

            }
        };

        User user;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            FacebookSdk.sdkInitialize(this);
            callbackManager = CallbackManager.Factory.create();

            accessTokenTracker= new AccessTokenTracker() {
                @Override
                protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {

                }
            };

            profileTracker = new ProfileTracker() {
                @Override
                protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {
                    displayMessage(newProfile);
                }
            };

            accessTokenTracker.startTracking();
            profileTracker.startTracking();
            AppEventsLogger.activateApp(this);
            setContentView(R.layout.activity_main);
            assert getActionBar() != null;
            getActionBar().hide();

            if(PrefUtils.getCurrentUser(MainActivity.this) != null){
                //Intent homeIntent = new Intent(MainActivity.this, LogoutActivity.class);
                Intent homeIntent = new Intent(MainActivity.this, ListViewActivity.class);
                startActivity(homeIntent);
                finish();
            }
            /*try {
                PackageInfo info = getPackageManager().getPackageInfo(
                        "com.comida",
                        PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = MessageDigest.getInstance("SHA");
                    md.update(signature.toByteArray());
                    Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
                }
            } catch (PackageManager.NameNotFoundException e) {

            } catch (NoSuchAlgorithmException e) {

            }*/
           /* FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });*/
        }


        private void displayMessage(Profile profile){
            if(profile != null){
                //textView.setText(profile.getName());
            }
        }

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



            callbackManager=CallbackManager.Factory.create();

            loginButton= (LoginButton)findViewById(R.id.login_button);

            loginButton.setReadPermissions("public_profile", "email","user_friends");

            btnLogin= (TextView) findViewById(R.id.btnLogin);
            btnLogin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    progressDialog = new ProgressDialog(MainActivity.this);
                    progressDialog.setMessage("Loading...");
                    progressDialog.show();

                    loginButton.performClick();

                    loginButton.setPressed(true);

                    loginButton.invalidate();

                    loginButton.registerCallback(callbackManager, mCallBack);

                    loginButton.setPressed(false);

                    loginButton.invalidate();

                }
            });
        }

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


        private FacebookCallback<LoginResult> mCallBack = new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {

                progressDialog.dismiss();

                // App code
                GraphRequest request = GraphRequest.newMeRequest(
                        //loginResult.getAccessToken(),
                        AccessToken.getCurrentAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(
                                    JSONObject object,
                                    GraphResponse response) {

                                Log.e("response: ", response + "");
                                try {
                                    user = new User();
                                    user.facebookID = object.getString("id").toString();
                                    user.email = object.getString("email").toString();
                                    user.name = object.getString("name").toString();
                                    user.gender = object.getString("gender").toString();
                                    PrefUtils.setCurrentUser(user,MainActivity.this);

                                }catch (Exception e){
                                    e.printStackTrace();
                                }
                                Toast.makeText(MainActivity.this,"welcome "+user.name,Toast.LENGTH_LONG).show();
                                Intent intent=new Intent(MainActivity.this,ListViewActivity.class);
                                //Intent intent=new Intent(MainActivity.this,LogoutActivity.class);
                                startActivity(intent);
                                finish();

                            }

                        });

                Bundle parameters = new Bundle();
                parameters.putString("fields", "id,name,email,gender, birthday");
                request.setParameters(parameters);
                request.executeAsync();
            }

            @Override
            public void     onCancel() {
                progressDialog.dismiss();
            }

            @Override
            public void onError(FacebookException e) {
                progressDialog.dismiss();
            }
        };

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

        /*@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();

            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }

            return super.onOptionsItemSelected(item);
        }*/
    }
公共类MainActivity扩展活动{
私人CallbackManager CallbackManager;
私人登录按钮登录按钮;
私有文本视图btnLogin;
私有进程对话;
私有AccessTokenTracker AccessTokenTracker;
个人档案跟踪器;
private FacebookCallback callback=新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
AccessToken AccessToken=loginResult.getAccessToken();
字符串标记=loginResult.getAccessToken().getToken();
Profile Profile=Profile.getCurrentProfile();
显示消息(配置文件);
}
@凌驾
公开作废{
}
@凌驾
public void onError(facebook异常错误){
}
};
用户;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
FacebookSdk.sdk初始化(此);
callbackManager=callbackManager.Factory.create();
accessTokenTracker=新的accessTokenTracker(){
@凌驾
更改当前AccessToken时受保护的无效(AccessToken oldToken、AccessToken newToken){
}
};
profileTracker=新的profileTracker(){
@凌驾
更改当前配置文件时受保护的无效(配置文件旧配置文件、配置文件新配置文件){
显示消息(newProfile);
}
};
accessTokenTracker.startTracking();
profileTracker.startTracking();
AppEventsLogger.activateApp(此);
setContentView(R.layout.activity_main);
断言getActionBar()!=null;
getActionBar().hide();
if(PrefUtils.getCurrentUser(MainActivity.this)!=null){
//意向homeIntent=新意向(MainActivity.this、LogoutActivity.class);
意向homeIntent=新意向(MainActivity.this、ListViewActivity.class);
startActivity(家庭意向);
完成();
}
/*试一试{
PackageInfo info=getPackageManager().getPackageInfo(
“com.comida”,
PackageManager.GET_签名);
用于(签名:信息签名){
MessageDigest md=MessageDigest.getInstance(“SHA”);
md.update(signature.toByteArray());
Log.d(“KeyHash:,Base64.encodeToString(md.digest(),Base64.DEFAULT));
}
}捕获(PackageManager.NameNotFounde异常){
}捕获(无算法异常){
}*/
/*FloatingActionButton fab=(FloatingActionButton)findViewById(R.id.fab);
fab.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Snackbar.make(查看“替换为您自己的操作”,Snackbar.LENGTH\u LONG)
.setAction(“Action”,null).show();
}
});*/
}
私有void显示消息(配置文件){
if(profile!=null){
//textView.setText(profile.getName());
}
}
@凌驾
受保护的void onResume(){
super.onResume();
callbackManager=callbackManager.Factory.create();
loginButton=(loginButton)findviewbyd(R.id.login_按钮);
setReadPermissions(“公共档案”、“电子邮件”、“用户朋友”);
btnLogin=(TextView)findViewById(R.id.btnLogin);
btnLogin.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
progressDialog=新建progressDialog(MainActivity.this);
progressDialog.setMessage(“加载…”);
progressDialog.show();
loginButton.performClick();
loginButton.setPressed(true);
loginButton.invalidate();
registerCallback(callbackManager,mCallBack);
loginButton.setPressed(假);
loginButton.invalidate();
}
});
}
@凌驾
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
callbackManager.onActivityResult(请求代码、结果代码、数据);
}
private FacebookCallback mCallBack=新建FacebookCallback(){
@凌驾
成功时公共无效(LoginResult LoginResult){
progressDialog.disclose();
//应用程序代码
GraphRequest请求=GraphRequest.newmereRequest(
//loginResult.getAccessToken(),
AccessToken.getCurrentAccessToken(),
新建GraphRequest.GraphJSONObjectCallback(){
@凌驾
公共空间未完成(
JSONObject对象,
GraphResponse(反应){
Log.e(“响应:,响应+”);
试一试{
user=新用户();
user.facebookID=object.getString(“id”).t
08-05 16:08:17.964 2258-2829/com.google.android.gms.persistent E/Auth: [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: <ELLIDED:601871123>, App: com.google.android.gms, Service: oauth2:https://www.googleapis.com/auth/games
                                                                       dkq: Long live credential not available.
                                                                           at dkr.a(:com.google.android.gms:3101)
                                                                           at dje.a(:com.google.android.gms:397)
                                                                           at djd.a(:com.google.android.gms:31369)
                                                                           at djd.a(:com.google.android.gms:313)
                                                                           at elb.a(:com.google.android.gms:1201)
                                                                           at ela.a(:com.google.android.gms:530)
                                                                           at ela.a(:com.google.android.gms:196)
                                                                           at dfw.a(:com.google.android.gms:320)
                                                                           at dfw.a(:com.google.android.gms:210)
                                                                           at dgf.a(:com.google.android.gms:1498)
                                                                           at dge.a(:com.google.android.gms:909)
                                                                           at dge.e(:com.google.android.gms:523)
                                                                           at dgd.a(:com.google.android.gms:37)
                                                                           at dhm.getAuthToken(:com.google.android.gms:178)
                                                                           at android.accounts.AbstractAccountAuthenticator$Transport.getAuthToken(AbstractAccountAuthenticator.java:214)
                                                                           at android.accounts.IAccountAuthenticator$Stub.onTransact(IAccountAuthenticator.java:113)
                                                                           at android.os.Binder.execTransact(Binder.java:453)

08-05 16:08:18.040 2258-2829/com.google.android.gms.persistent W/GLSActivity: dgt: BadAuthentication
                                                                                  at dgf.a(:com.google.android.gms:1515)
                                                                                  at dge.a(:com.google.android.gms:909)
                                                                                  at dge.e(:com.google.android.gms:523)
                                                                                  at dgd.a(:com.google.android.gms:37)
                                                                                  at dhm.getAuthToken(:com.google.android.gms:178)
                                                                                  at android.accounts.AbstractAccountAuthenticator$Transport.getAuthToken(AbstractAccountAuthenticator.java:214)
                                                                                  at android.accounts.IAccountAuthenticator$Stub.onTransact(IAccountAuthenticator.java:113)
                                                                                  at android.os.Binder.execTransact(Binder.java:453)
AccessToken.getCurrentAccessToken().getToken();
Profile.getCurrentProfile();
Log.w("accessToken", accessToken.getUserId().toString());