我使用Facebook SDK允许用户使用我的应用中的Facebook SSO按钮登录。它适用于所有Android设备(在sdk 7之上),除了一个。 Bedove HY5001,运行Android版本4.2.1。
当用户点击Facebook SSO登录按钮时,会发生Facebook身份验证(Facebook应用程序启动并按预期运行它的魔法)然后发生附加的logcat错误并返回活动,用户仍然没有 - 登录。
知道为什么会发生这种特定用户?使用facebook登录的其他Android应用程序工作正常。
以下是登录活动的代码:
public class Loco extends FragmentActivity {
private String email, at;
private LoginButton loginBtn;
public Loco parent;
public Context context;
public String result;
private UiLifecycleHelper uiHelper;
private static final List<String> PERMISSIONS = Arrays.asList("email","publish_actions");
public boolean loggedin, registered, error;
SharedPreferences sharedpreferences;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loggedin = false;
parent = this;
context = this;
uiHelper = new UiLifecycleHelper(this, statusCallback);
uiHelper.onCreate(savedInstanceState);
setContentView(R.layout.login);
loginBtn = (LoginButton) findViewById(R.id.fbLogin);
loginBtn.setBackgroundColor(0xFF375796);
loginBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
if (user != null) {
requestPermissions();
email = user.asMap().get("email").toString();
Intent intent = new Intent(parent, xxx.class);
startActivity(intent);
parent.finish();
}
}
});
}
});
}
private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
Log.d("FacebookSampleActivity", "Facebook session opened");
} else if (state.isClosed()) {
Log.d("FacebookSampleActivity", "Facebook session closed");
}
}
};
public boolean checkPermissions() {
Session s = Session.getActiveSession();
if (s != null) {
return s.getPermissions().contains("email");
} else
return false;
}
public void requestPermissions() {
Session s = Session.getActiveSession();
if (s != null){
s.requestNewPublishPermissions(new Session.NewPermissionsRequest(this, PERMISSIONS));
}
}
@Override
public void onResume() {
super.onResume();
uiHelper.onResume();
Session session = Session.getActiveSession();
if (session.isOpened()) {
at = session.getAccessToken();
System.out.print(at + " Access Token inside onResume");
} else {
at = "invalid";
}
}
@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
System.out.println("onactivityRes");
uiHelper.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onSaveInstanceState(Bundle savedState) {
super.onSaveInstanceState(savedState);
uiHelper.onSaveInstanceState(savedState);
}
}
logcat输出为:
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86e88 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86ec0 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86ef8 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86f30 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86f68 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86fa0 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e86fd8 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87010 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87048 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87080 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e870b8 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e870f0 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87128 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87160 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87198 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e871d0 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87208 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87240 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87408 len=1,timeo=0
11-08 19:13:27.646: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.646: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e87440 len=1,timeo=0
11-08 19:13:27.647: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.647: D/NativeCrypto(11422): Returned from SSL_Read() with result 1, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.654: D/NativeCrypto(11422): ssl=0x5e7d97c8 sslRead buf=0x41e8b5c8 len=650,timeo=0
11-08 19:13:27.654: D/NativeCrypto(11422): Doing SSL_Read() ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:27.654: D/NativeCrypto(11422): Returned from SSL_Read() with result 650, error code 0 ssl=0x5e7d97c8, appData=0x5ebec740
11-08 19:13:31.451: V/Provider/Settings(11422): invalidate [system]: current 567 != cached 0
11-08 19:13:31.456: V/Provider/Settings(11422): from db cache, name = sound_effects_enabled , value = 0
11-08 19:13:31.465: V/Provider/Settings(11422): invalidate [secure]: current 1 != cached 0
11-08 19:13:31.466: V/Provider/Settings(11422): from db cache, name = android_id , value = c8d6fdc530ca508c
11-08 19:13:31.468: D/dalvikvm(11422): create interp thread : stack size=32KB
11-08 19:13:31.469: D/dalvikvm(11422): create new thread
11-08 19:13:31.469: D/dalvikvm(11422): new thread created
11-08 19:13:31.469: D/dalvikvm(11422): update thread list
11-08 19:13:31.469: D/dalvikvm(11422): threadid=13: interp stack at 0x5dda2000
11-08 19:13:31.469: D/dalvikvm(11422): threadid=13: created from interp
11-08 19:13:31.469: D/dalvikvm(11422): start new thread
11-08 19:13:31.469: D/dalvikvm(11422): create interp thread : stack size=32KB
11-08 19:13:31.469: D/dalvikvm(11422): create new thread
11-08 19:13:31.469: D/dalvikvm(11422): new thread created
11-08 19:13:31.469: D/dalvikvm(11422): update thread list
11-08 19:13:31.469: D/dalvikvm(11422): threadid=13: notify debugger
11-08 19:13:31.469: D/dalvikvm(11422): threadid=13 (Timer-0): calling run()
11-08 19:13:31.470: D/dalvikvm(11422): threadid=14: interp stack at 0x5deaa000
11-08 19:13:31.470: D/dalvikvm(11422): threadid=14: created from interp
11-08 19:13:31.470: D/dalvikvm(11422): start new thread
11-08 19:13:31.470: D/dalvikvm(11422): threadid=14: notify debugger
11-08 19:13:31.470: D/dalvikvm(11422): threadid=14 (Timer-1): calling run()
11-08 19:13:31.472: D/dalvikvm(11422): create interp thread : stack size=32KB
11-08 19:13:31.472: D/dalvikvm(11422): create new thread
11-08 19:13:31.472: D/dalvikvm(11422): new thread created
11-08 19:13:31.472: D/dalvikvm(11422): update thread list
11-08 19:13:31.472: D/dalvikvm(11422): threadid=15: interp stack at 0x5dfb2000
11-08 19:13:31.472: D/dalvikvm(11422): threadid=15: created from interp
11-08 19:13:31.472: D/dalvikvm(11422): start new thread
11-08 19:13:31.473: D/dalvikvm(11422): threadid=15: notify debugger
11-08 19:13:31.473: D/dalvikvm(11422): threadid=15 (SharedPreferencesImpl-load): calling run()
11-08 19:13:31.473: D/dalvikvm(11422): threadid=15: exiting
11-08 19:13:31.473: D/dalvikvm(11422): threadid=15: bye!
11-08 19:13:31.694: D/skia(11422): Flag is not 10
11-08 19:13:31.741: I/SurfaceTextureClient(11422): [STC::queueBuffer] (this:0x5e8108c0) fps:0.10, dur:9748.44, max:9748.44, min:9748.44
11-08 19:13:31.741: I/SurfaceTextureClient(11422): [STC::queueBuffer] this:0x5e8108c0, api:1, last queue time elapsed:9748.44
11-08 19:13:31.806: V/InputMethodManager(11422): onWindowFocus: null softInputMode=289 first=true flags=#1810100
11-08 19:13:31.806: V/InputMethodManager(11422): START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{41ed4ec0 V.E..... R.....ID 0,0-720,1280} ic=null tba=android.view.inputmethod.EditorInfo@41ef4e18 controlFlags=#104
11-08 19:13:31.819: V/InputMethodManager(11422): Starting input: Bind result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41ef5778 com.syntellia.fleksy.kb/com.syntellia.fleksy.keyboard.Fleksy #1002}
11-08 19:13:31.858: D/OpenGLRenderer(11422): Flushing caches (mode 0)
11-08 19:13:32.689: D/IPCThreadState(11422): [DN #5] BR_CLEAR_DEATH_NOTIFICATION_DONE cookie 0x5cc6b3b0
11-08 19:13:32.705: D/OpenGLRenderer(11422): Flushing caches (mode 1)
11-08 19:13:33.461: D/OpenGLRenderer(11422): Flushing caches (mode 0)
11-08 19:13:34.323: I/System.out(11422): onactivityRes
11-08 19:13:34.351: V/InputMethodManager(11422): onWindowFocus: null softInputMode=33 first=true flags=#1810100
11-08 19:13:34.352: V/InputMethodManager(11422): START INPUT: com.android.internal.policy.impl.PhoneWindow$DecorView{41644ef0 V.E..... R.....ID 0,0-720,1280} ic=null tba=android.view.inputmethod.EditorInfo@41f4dca0 controlFlags=#104
11-08 19:13:34.353: V/InputMethodManager(11422): Starting input: Bind result=InputBindResult{com.android.internal.view.IInputMethodSession$Stub$Proxy@41f4e540 com.syntellia.fleksy.kb/com.syntellia.fleksy.keyboard.Fleksy #1003}
11-08 19:13:34.472: D/FacebookSampleActivity(11422): Facebook session closed
11-08 19:13:34.516: D/OpenGLRenderer(11422): Flushing caches (mode 0)
答案 0 :(得分:0)
我前段时间设法解决了这个问题,我想我会分享帮助他人的答案。说实话,我不知道为什么下面的代码适用于所有设备,而原始帖子中的代码并不适用于那个设备(Bedove HY5001)。我希望有人可以解释一下。
聚苯乙烯。为下面可怕的代码格式道歉。
public LoginButton loginButton; //FB SSO button
loginButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user) {
LoginScreen.this.user = user;
}
});
loginButton.setReadPermissions(Arrays.asList(Configurations.fbReqPublicProfile,Configurations.fbReqEmail));
// session state call back event
loginButton.setSessionStatusCallback(new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user,Response response) {
//Do your stuff here e.g as follows:
String facebook_email = user.asMap().get("email").toString();
}
});
}
}
});