Facebook的会议总是给我关闭登录失败 [英] facebook session always give me Close Login Failed
本文介绍了Facebook的会议总是给我关闭登录失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经下载了最新的Facebook SDK,我试图让用户信息 session.isOpened()
永远是假的,任何一个可以在这里帮忙?
这是我的code:
公共类MainActivity延伸活动{ 按钮登录;
TextView的名称;
TextView的电子邮件;
ImageView的轮廓; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); // //添加code打印出来的密钥散列
//尝试{
// PackageInfo信息= getPackageManager()。getPackageInfo(
//com.actelme.testfacebook,PackageManager.GET_SIGNATURES);
//为(签名签名:info.signatures){
//消息摘要MD = MessageDigest.getInstance(SHA);
// md.update(signature.toByteArray());
// Log.d(KeyHash:,
// Base64.en codeToString(md.digest(),Base64.DEFAULT));
//}
//}赶上(ē的NameNotFoundException){
//
//}赶上(抛出:NoSuchAlgorithmException E){
//
//} 登录=(按钮)findViewById(R.id.login);
名=(的TextView)findViewById(R.id.name);
电子邮件=(的TextView)findViewById(R.id.email);
简介=(ImageView的)findViewById(R.id.picture); login.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(查看为arg0){
//启动的Facebook登录
Session.openActiveSession(MainActivity.this,真实,
新Session.StatusCallback(){ //回调时,会话状态变化
@覆盖
公共无效呼叫(会话的会话,
SessionState会状态,异常除外){
如果(session.isOpened()){ //使请求/我API
Request.newMeRequest(会话,
新Request.GraphUserCallback(){ //图形API后回调
//响应与用户对象
@覆盖
公共无效onCompleted(
GraphUser用户,
响应响应){
如果(用户!= NULL){ name.setText(名
.getText()
+
+ user.getName()
+)!; email.setText(电子邮件
.getText()
+
+ user.asMap()
获得(电子邮件)
的ToString()); profile.setImageBitmap(getUserPic(用户
.getId())); }
}
})executeAsync()。 }
}
});
}
});
} @覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,结果code,数据);
Session.getActiveSession()的onActivityResult(这一点,要求code,
结果code,数据);
} 公共位图getUserPic(字符串userid){ 串IMAGEURL;
位图位图= NULL;
IMAGEURL =http://graph.facebook.com/用户ID +
+?/图像类型=小;
尝试{
位= BitmapFactory.de codeStream((InputStream的)新的URL(IMAGEURL)
.getContent());
}赶上(例外五){
Log.d(TAG,加载图片失败);
e.printStackTrace();
}
返回位图;
}
修改我已经申请您的code,但仍无法正常工作
公共类MainActivity延伸活动{会话的会话;
TextView的名称;
TextView的电子邮件;
ImageView的轮廓;
StatusCallback statusCallback =(新StatusCallback(){ @燮pressWarnings(德precation)
@覆盖
公共无效电话(最后一届会议,SessionState会的状态,
例外的例外){
如果(session.isOpened()){
Request.executeMeRequestAsync(会话,新GraphUserCallback(){ @覆盖
公共无效onCompleted(GraphUser用户,响应响应){
如果(用户!= NULL){ name.setText(name.getText()++ user.getName()
+)!; email.setText(email.getText()+
+ user.asMap()获得(电子邮件)的toString())。; profile.setImageBitmap(getUserPic(user.getId()));
}
}
});
}
}
});@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); 会话= Session.getActiveSession();
如果(会话== NULL){
如果(savedInstanceState!= NULL){
Log.d(TAG,恢复会话);
会话= Session.restoreSession(getApplicationContext(),空,
statusCallback,savedInstanceState);
}
如果(会话== NULL){
Log.d(TAG,创建新一届);
会话=新的Session(getApplicationContext());
}
Log.d(TAG,活动会话);
Session.setActiveSession(会话);
}其他{
Log.d(TAG,会话为空 - >中。+ session.getState()的toString());
} 名=(的TextView)findViewById(R.id.name);
电子邮件=(的TextView)findViewById(R.id.email);
简介=(ImageView的)findViewById(R.id.picture); LoginButton authButton =(LoginButton)findViewById(R.id.login_button);
authButton.setOnErrorListener(新OnErrorListener(){ @覆盖
公共无效onerror的(FacebookException错误){
Log.d(TAG,错误:+ error.getMessage()+原因:
+ error.getCause());
}
}); authButton.setReadPermissions(Arrays.asList(basic_info,电子邮件));
authButton.setSessionStatusCallback(statusCallback);
}@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){ super.onActivityResult(要求code,结果code,数据);
Session.getActiveSession()的onActivityResult(这一点,要求code,
结果code,数据);
}公共位图getUserPic(字符串userid){ 串IMAGEURL;
位图位图= NULL;
IMAGEURL =http://graph.facebook.com/用户ID +
+?/图像类型=小;
尝试{
位= BitmapFactory.de codeStream((InputStream的)新的URL(IMAGEURL)
.getContent());
}赶上(例外五){
Log.d(TAG,加载图片失败);
e.printStackTrace();
}
返回位图;
}
}
EDIT2
我已经生成使用这个code作为教程中的密钥散列,然后将其添加到我的应用程序设置
//添加code打印出来的密钥散列
尝试{
PackageInfo信息= getPackageManager()。getPackageInfo(
com.facebook.samples.hellofacebook
PackageManager.GET_SIGNATURES);
对(签字签名:info.signatures){
消息摘要MD = MessageDigest.getInstance(SHA);
md.update(signature.toByteArray());
Log.d(KeyHash:Base64.en codeToString(md.digest(),Base64.DEFAULT));
}
}赶上(ē的NameNotFoundException){ }赶上(抛出:NoSuchAlgorithmException E){ }
解决方案
使用本机登录Facebok的。
按钮XML
< com.facebook.widget.LoginButton
机器人:ID =@ + ID / login_button
机器人:layout_width =WRAP_CONTENT
机器人:layout_height =WRAP_CONTENT
机器人:layout_centerHorizontal =真
机器人:layout_marginTop =14dp/>
code为登录活动:
LoginButton authButton =(LoginButton)findViewById(R.id.login_button);
authButton.setOnErrorListener(新OnErrorListener(){ @覆盖
公共无效onerror的(FacebookException错误){
DebugLog.log(错误:+ error.getMessage()+原因:+ error.getCause());
}
}); authButton.setReadPermissions(Arrays.asList(basic_info,电子邮件));
authButton.setSessionStatusCallback(新StatusCallback(){ @燮pressWarnings(德precation)
@覆盖
公共无效电话(最后一届会议,SessionState会状态,异常除外){
如果(session.isOpened()){
Request.executeMeRequestAsync(会话,新GraphUserCallback(){ @覆盖
公共无效onCompleted(GraphUser用户,响应响应){
如果(用户!= NULL){ //你的code
}
}
});
}
}
});
code为控制会话:
会议= Session.getActiveSession();
如果(会话== NULL){
如果(savedInstanceState!= NULL){
DebugLog.log(恢复会话);
会话= Session.restoreSession(getApplicationContext(),空,statusCallback,savedInstanceState);
}
如果(会话== NULL){
DebugLog.log(创建新一届);
会话=新的Session(getApplicationContext());
}
DebugLog.log(活动会话);
Session.setActiveSession(会话);
}其他{
DebugLog.log(会话为空 - >中。+ session.getState()的toString());
}
希望能够帮助您
I have downloaded the latest Facebook SDK and I'm trying to get user info session.isOpened()
is always false, can any one help here ?
This is my code:
public class MainActivity extends Activity {
Button login;
TextView name;
TextView email;
ImageView profile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// // Add code to print out the key hash
// try {
// PackageInfo info = getPackageManager().getPackageInfo(
// "com.actelme.testfacebook", 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) {
//
// }
login = (Button) findViewById(R.id.login);
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
profile = (ImageView) findViewById(R.id.picture);
login.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// start Facebook Login
Session.openActiveSession(MainActivity.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.newMeRequest(session,
new Request.GraphUserCallback() {
// callback after Graph API
// response with user object
@Override
public void onCompleted(
GraphUser user,
Response response) {
if (user != null) {
name.setText(name
.getText()
+ " "
+ user.getName()
+ "!");
email.setText(email
.getText()
+ " "
+ user.asMap()
.get("email")
.toString());
profile.setImageBitmap(getUserPic(user
.getId()));
}
}
}).executeAsync();
}
}
});
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
imageURL = "http://graph.facebook.com/" + userID
+ "/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageURL)
.getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
EDIT I have applied your code but still not working
public class MainActivity extends Activity {
Session session;
TextView name;
TextView email;
ImageView profile;
StatusCallback statusCallback = (new StatusCallback() {
@SuppressWarnings("deprecation")
@Override
public void call(final Session session, SessionState state,
Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
name.setText(name.getText() + " " + user.getName()
+ "!");
email.setText(email.getText() + " "
+ user.asMap().get("email").toString());
profile.setImageBitmap(getUserPic(user.getId()));
}
}
});
}
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
Log.d("TAG", "Restoring session");
session = Session.restoreSession(getApplicationContext(), null,
statusCallback, savedInstanceState);
}
if (session == null) {
Log.d("TAG", "Creating new session");
session = new Session(getApplicationContext());
}
Log.d("TAG", "Active session");
Session.setActiveSession(session);
} else {
Log.d("TAG", "Session is null --> " + session.getState().toString());
}
name = (TextView) findViewById(R.id.name);
email = (TextView) findViewById(R.id.email);
profile = (ImageView) findViewById(R.id.picture);
LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
Log.d("TAG", "Error: " + error.getMessage() + " Cause: "
+ error.getCause());
}
});
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
authButton.setSessionStatusCallback(statusCallback);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode,
resultCode, data);
}
public Bitmap getUserPic(String userID) {
String imageURL;
Bitmap bitmap = null;
imageURL = "http://graph.facebook.com/" + userID
+ "/picture?type=small";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageURL)
.getContent());
} catch (Exception e) {
Log.d("TAG", "Loading Picture FAILED");
e.printStackTrace();
}
return bitmap;
}
}
EDIT2
I have generated the key hash using this code as tutorial, and then add it to my app settings
// Add code to print out the key hash
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.facebook.samples.hellofacebook",
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) {
}
解决方案
Use the native login facebok.
Button xml
<com.facebook.widget.LoginButton
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="14dp" />
Code for the login activity:
LoginButton authButton = (LoginButton) findViewById(R.id.login_button);
authButton.setOnErrorListener(new OnErrorListener() {
@Override
public void onError(FacebookException error) {
DebugLog.log("Error: " + error.getMessage() + " Cause: " + error.getCause());
}
});
authButton.setReadPermissions(Arrays.asList("basic_info", "email"));
authButton.setSessionStatusCallback(new StatusCallback() {
@SuppressWarnings("deprecation")
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
// Your code
}
}
});
}
}
});
Code for the control session:
session = Session.getActiveSession();
if (session == null) {
if (savedInstanceState != null) {
DebugLog.log("Restoring session");
session = Session.restoreSession(getApplicationContext(), null, statusCallback, savedInstanceState);
}
if (session == null) {
DebugLog.log("Creating new session");
session = new Session(getApplicationContext());
}
DebugLog.log("Active session");
Session.setActiveSession(session);
} else {
DebugLog.log("Session is null --> " + session.getState().toString());
}
Hope that help you
这篇关于Facebook的会议总是给我关闭登录失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文