Следвах влизане във Facebook за Android, за да интегрирам FB в моето приложение за Android. Това е направено. Виждам екрана за разрешение, където потребителят трябва да приеме да използва своя имейл адрес. Проблемът е, че нито едно от обратните извиквания на FacebookCallback не се извиква.
Следвах същата процедура, спомената в горния урок.
- Стартирах FB SDK.
- След това създаде екземпляр на CallBackManager.
- Имате setFragment(this).
- Регистриран FacebookCallback callabck по този начин
Код на фрагмента:
public class MyFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(this.getActivity().getApplicationContext());
super.onCreate(savedInstanceState);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
mButtonFbLogin.setReadPermissions(Arrays.asList("email"));
mButtonFbLogin.setFragment(this);
mCallbackManager = CallbackManager.Factory.create();
mButtonFbLogin.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
Log.d(TAG, "FB Login Successful. Token : " +loginResult.getAccessToken());
}
@Override
public void onCancel() {
Log.d(TAG, "FB Login cancelled..");
}
@Override
public void onError(FacebookException e) {
Log.d(TAG, "FB Login failed. Exception : " +e.toString());
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.d(TAG, "onActivityResult of Fragment..");
mCallbackManager.onActivityResult(requestCode, resultCode, data);
}
}
- Накрая се обадих на
mCallbackManager.onActivityResult(requestCode, resultCode, data);
. OnActivityResult() на моята дейност се извиква първо от мястото, където извиках onActivityResult() на фрагмента.
Чрез регистрационни файлове виждам, че onActivityResult
от моя фрагмент е извикан и следователно onActivityResult()
от callbackManger също. Но нито едно от обратните извиквания на Facebook Callback не се извиква.
Някаква следа?
AccessToken.getCurrentAccessToken()
е начин, който може да се използва в onCreate()
. Но с това не мога точно да знам кога за първи път е създаден маркерът.
И AccessTokenTracker
всъщност е да се проследят промените в токените, но не и да се знае кога сесията за влизане е успешна, неуспешна или отменена.
АКТУАЛИЗАЦИЯ:
Току-що опитах с AccessTokenTracker, но onCurrentAccessTokenChanged() не беше извикан, след като натиснах OK на екрана за разрешение и контролът се върна към моя фрагмент. Това е кодът:
@Override public void onCreate(Bundle savedInstanceState) { FacebookSdk.sdkInitialize(this.getActivity().getApplicationContext());
mAccessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(
AccessToken oldAccessToken,
AccessToken currentAccessToken) {
Log.d(TAG, "onCurrentAccessTokenChanged : old : " +oldAccessToken);
Log.d(TAG, "onCurrentAccessTokenChanged : new : " +currentAccessToken);
}
};
mAccessTokenTracker.startTracking();
super.onCreate(savedInstanceState);
}