Я пытался внедрить Facebook SDK в свое приложение, чтобы пользователи могли публиковать сообщения на нашем фан-экране через приложение.Однако мне не удалось даже войти в систему пользователя через SDK.
В примерах SDK приведен простой пример, в котором используется Activity
, чтобы попытаться авторизовать пользователя с помощью единого входа.На.Я попробовал этот пример сам, и он работает.Я могу войти в систему, мне пришлось авторизовать приложение для использования моих данных Facebook, и я мог видеть запросы, сделанные и полученные в LogCat.
Теперь я попытался добавить тот же код в свойсобственное приложение.Это приложение Fragment
на основе пакета совместимости.Есть один центральный FragmentActivity
, а остальные мои классы просты Fragments
.При добавлении примера кода к одному из этих Fragments
приложение Facebook запускается на полсекунды при попытке авторизации, но затем закрывается и ничего не происходит.Я снова вернулся к своему обычному фрагменту.
При проверке LogCat после этого, ничто не говорит о том, что приложение Facebook даже открыло или сделало какие-либо запросы, кроме того, что оно показывает некоторые проверки печати, которые я добавил, и фактговорит, что это начало намерения Facebook:
01-12 13:19:40.874: I/System.out(6087): Calling authorize
01-12 13:19:40.874: I/ActivityManager(1380): Starting activity: Intent { cmp=com.facebook.katana/.ProxyAuth (has extras) } from pid 6087
01-12 13:19:40.874: I/System.out(6087): Called authorize
Кроме этого, ничего не возвращается.Никаких проверок в Facebook, никаких заявлений о том, что мои ключи неверны или что-то в этом роде, просто ничего.Намерение Facebook было объявлено, но оно закрылось почти сразу, и больше ничего не показывает, что оно было даже открыто.
Это уже поражало меня в течение нескольких часов, и я начинаю думать, что обычные, типовыепредоставленный подход просто не работает в Fragments
из-за способа работы Fragments
.
Код, который я использовал, размещен ниже.Фрагмент запускается кнопкой, которая вызывает FragmentTransaction
.Я делаю что-то здесь в корне неправильно, или Facebook SDK действительно просто не работает с Fragments
?Я пытался найти эту проблему, но мне не удалось найти кого-либо еще с такой же ситуацией.
public class FanWallFacebook extends Fragment {
Facebook facebook = new Facebook("294678133912628");
public FanWallFacebook() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.filler, container, false);
}
@Override
public void onStart() {
super.onStart();
System.out.println("Calling authorize");
facebook.authorize(getActivity(), new DialogListener() {
@Override
public void onComplete(Bundle values) {
System.out.println("Completed");
}
@Override
public void onFacebookError(FacebookError error) {
System.out.println("Facebook error: "+error.getMessage());
}
@Override
public void onError(DialogError e) {
System.out.println("General error: "+e.getMessage());
}
@Override
public void onCancel() {
System.out.println("Cancelled");
}
});
System.out.println("Called authorize");
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
System.out.println("Authorize callback'd");
}
}
Редактировать
Только что попробовал использовать FragmentActivity
, и вот, это работает.Он успешно входит в систему. Похоже, SDK действительно работает только с классами, которые явно расширяют ...Activity
.Может ли кто-нибудь дать мне идею, почему это может иметь место?Я всегда думал, что Fragments
где-то вниз по линии, а также Activity
.