Próbuję zaimplementować prostą czynność w mojej aplikacji Android, w której użytkownik jest proszony o zalogowanie się za pośrednictwem Facebooka, aby odzyskać "polubienia" użytkownika . Więc oczywiście najpierw testuję proste logowanie przez facebook. Używam dokładnego kodu, który mają na "Pierwsze kroki z Facebook SDK dla Androida" - krok 6 (https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/), ale z jakiegoś powodu to nie działa. Kiedy debugowanie kodu zdałem sobie sprawę, że następujący warunek:if (session.isOpen()), facebook login na Androida zawsze zwraca false
if(session.isOpen())
jest ZAWSZE powrocie fałszywy, chociaż ja już być zalogowany na Facebooku. Próbowałem wszystkiego, aby to naprawić, ale nic nie działa.
Ktoś miał ten problem lub wie, jak to naprawić?
EDYCJA: Próbuję tego testu na moim telefonie bezpośrednio na emulatorze. Nie wiem, czy to może być problem.
Z góry dziękuję!
I wypróbowałem to rozwiązanie session.isOpened() returns false even if successfully logged in to Facebook, ale używanie java 6 lub 7 nadal dawało ten sam klucz hash.
EDIT 2: Próbowałem również tego samego, ale z nieco innym podejściem. http://sonyarouje.com/2011/09/18/facebook-hash-key-for-android-apps/ Nadal mam ten sam problem. Metoda session.isOpen() zawsze zwraca wartość false.
EDYCJA 3: Oto najnowszy kod, który próbowałem. Nie sądzę, że są jakieś błędy w logcat. W każdym razie połączę to tutaj, na wypadek, gdy czegoś mi brakuje.
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;
}
}
I moje wyjście logcat: https://www.dropbox.com/s/7qg9zbhlpikfovf/log.txt
Rozumiem, że jesteś po prostu z samouczka, ale proszę pisać kod dokładnie tak, jak trzeba, i wszelkie błędy w kodzie logującym. –
Dzięki za odpowiedź, zaktualizowałem swoje pytanie za pomocą kodu i wyjścia logcat. –