Dan*_*ima 13 session android facebook login
我正在尝试在我的Android应用程序中实现一个简单的活动,其中要求用户通过Facebook登录,以便检索用户的"喜欢".所以很明显我首先通过Facebook测试一个简单的登录.我正在使用"Facebook SDK for Android入门"中的确切代码 - 步骤6(https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/)但由于某种原因,它不起作用.当我调试代码时,我意识到以下情况:
if(session.isOpen())
Run Code Online (Sandbox Code Playgroud)
即使我已经登录到Facebook,也总是返回false.我已经尝试了一切来修复它,但似乎没有任何工作.
有人有这个问题或知道如何解决它?
编辑:我正在手机上尝试这个测试而不是在模拟器上.我不知道这是不是一个问题.
提前致谢!
我确实试过这个解决方案session.isOpened()返回false,即使成功登录到Facebook但使用java 6或7仍然提供相同的哈希键.
编辑2:我也尝试了同样的事情,但方法略有不同.http://sonyarouje.com/2011/09/18/facebook-hash-key-for-android-apps/我仍然遇到同样的问题.该session.isOpen()方法总是返回false.
编辑3:这是我尝试过的最新代码.我不认为logcat中有任何错误.无论如何,我会把它链接到这里以防万一我错过了什么.
package com.example.danandroidapp;
import java.util.Arrays;
import com.facebook.FacebookException;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.OnErrorListener;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private String TAG = "MainActivity";
private TextView lblEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lblEmail = (TextView) findViewById(R.id.lblEmail);
LoginButton authButton = (LoginButton) findViewById(R.id.authButton);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
Log.i(TAG, "Error " + error.getMessage());
}
});
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
authButton.setSessionStatusCallback(new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if(session.isOpened()) {
Log.i(TAG, "Access Token " + session.getAccessToken());
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if(user != null) {
Log.i(TAG, "User ID " + user.getId());
Log.i(TAG, "Email " + user.asMap().get("email"));
lblEmail.setText(user.asMap().get("email").toString());
}
}
});
}
}
});
}
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
我的logcat输出:https://www.dropbox.com/s/7qg9zbhlpikfovf/log.txt
小智 9
我有类似的问题,因为facebook中的hashkey错误,通过以下代码,您可以获得已发送到Facebook的哈希键.只需复制此hashkey并替换它.它将开始工作.
try {
PackageInfo info = getPackageManager().getPackageInfo(
"your.root.package",
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 (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
Run Code Online (Sandbox Code Playgroud)
您缺少onActivityResult覆盖("入门指南"中代码段的最后一位).
onActivityResult是信息从FB应用程序(或webview)返回到您的应用程序的方式,必须被覆盖才能回调到会话中.
| 归档时间: |
|
| 查看次数: |
11640 次 |
| 最近记录: |