Ich benutze Facebook Android SDK, um SSO zu erlauben. Ich habe die Anleitung und das Tutorial in Hackbook gefolgt, aber es passiert, dass das Telefon scheint auf einem weißen Bildschirm stecken, nach 10 Sekunden erscheint ein Fortschritt Dialog und der Prozess läuft wie erwartet.Facebook android SDK und weißer Bildschirm
Ich habe versucht, das Problem (asynchrone Aufgaben, transparente Layouts) zu beheben, aber es scheint nichts funktioniert.
Dies ist der Code in Facebook Aktivität:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.facebook_activity);
/*
* Get existing access_token if any
*/
mPrefs = getPreferences(MODE_PRIVATE);
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if (access_token != null) {
facebook.setAccessToken(access_token);
}
if (expires != 0) {
facebook.setAccessExpires(expires);
}
/*
* Only call authorize if the access_token has expired.
*/
// showProgress();
if (!facebook.isSessionValid()) {
authorizeFacebook();
} else {
signalResult();
}
}
private void authorizeFacebook() {
facebook.authorize(this, new String[] { "email", "offline_access",
"publish_stream", "user_about_me" }, new DialogListener() {
@Override
public void onComplete(Bundle values) {
// SharedPreferences.Editor editor = mPrefs.edit();
// editor.putString("access_token",
// facebook.getAccessToken());
// editor.putLong("access_expires",
// facebook.getAccessExpires());
// editor.commit();
signalResult();
// retrieve call obtain information and register
}
@Override
public void onFacebookError(FacebookError error) {
}
@Override
public void onError(DialogError e) {
}
@Override
public void onCancel() {
}
});
}
private void signalResult() {
// retrieve user info
new AsyncFacebookRunner(facebook).request("me",
new AsyncFacebookRunner.RequestListener() {
@Override
public void onMalformedURLException(
MalformedURLException e, Object state) {
authorizeFacebook();
}
@Override
public void onIOException(IOException e, Object state) {
authorizeFacebook();
}
@Override
public void onFileNotFoundException(
FileNotFoundException e, Object state) {
authorizeFacebook();
}
@Override
public void onFacebookError(FacebookError e, Object state) {
authorizeFacebook();
}
@Override
public void onComplete(String response, Object state) {
Intent intent = new Intent();
String accessToken = facebook.getAccessToken();
String id = null;
JSONObject json;
try {
json = new JSONObject(response);
id = json.getString("id");
intent.putExtra(WeOrderApplication.FACEBOOK_USER, id);
intent.putExtra(WeOrderApplication.FACEBOOK,
accessToken);
// hideProgress();
setResult(RESULT_OK, intent);
finish();
} catch (JSONException e) {
authorizeFacebook();
e.printStackTrace();
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
}
und es wird durch eine einfache StartActivity genannt. facebook_activity ist ein linearLayout ohne etwas darin. Ich habe ein transparentes Thema (Android: theme = "@ android: style/Theme.Translucent.NoTitleBar") auf FacebookActivity gesetzt, um es zumindest transparent zu machen, aber es hat auch nicht funktioniert.
Danke an alle, die helfen könnten, dies zu beheben.