Android 无法通过登录Facebook获取访问令牌
我在android中使用facebook登录。但我没有获得访问令牌。 我正在获取用户详细信息,如电子邮件、姓名等。 有人能告诉我为什么我没有得到代币吗 我正在使用facebook sdk 4.0.0 主要活动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;
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());