Facebook iOS — приложение handleOpenURL и Tabbar

#iphone #ios #facebook

#iPhone #iOS #Facebook

Вопрос:

У меня возникли трудности с входом в Facebook, чтобы вернуться к правильному представлению в моем приложении и вызвать соответствующие функции facebook.

В примере Facebook имеет просто [controller facebook], с которого они начинаются. Я использую приложение tabbar, поэтому у меня нет необходимой ссылки. Я создал указатель на желаемый вид и использовал его … он открылся правильно, но не вызвал ни один из методов, связанных с facebook, в частности:

 (void)fbDidLogin;

(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    return [[*NotReferencedViewController* facebook] handleOpenURL:url];
}
  

Кто-нибудь еще сталкивался с этим?

Ответ №1:

Не уверен, о каком примере вы говорите, но вы должны создать и сохранить свой Facebook-объект в центральном месте, таком как ваша модель или UIApplicationDelegate . Тогда оно было бы доступно через синглтоны, чтобы у вас всегда был к нему доступ, например:

 [[UIApplication sharedApplication] delegate].facebook
  

Таким образом, вы можете получить доступ к объекту facebook с любого контроллера просмотра, который в нем нуждается.

Когда вы делаете что-то вроде

 NSArray* permissions =  [[NSArray arrayWithObjects:@"email", @"read_stream", @"publish_stream", nil] retain];

[facebook authorize:permissions delegate:self];
  

указание delegate:self означает, что вы будете реализовывать методы в этом классе, которые Facebook может вызывать для информирования вас об определенных событиях. Одним из таких методов является fbDidLogin , и с его помощью вы можете делать все, что вам нужно для:

 -(void)authorizeFacebook {
    NSArray* permissions =  [NSArray arrayWithObjects:@"email", @"read_stream", @"publish_stream", nil];

    [facebook authorize:permissions delegate:self];
}

// if the authorization succeeds it will come back to your app and call the method below
-(void)fbDidLogin {
    // switch view, call the facebook graph, or do whatever else you like
}
  

Вы могли бы сделать это в самом делегате приложения или в контроллере представления.

Вы можете ознакомиться с методами делегирования facebook, просмотрев файлы .h facebook SDK: Facebook.h, FacebookRequest.h и т.д.

Редактировать

И ваш handleOpenURL: метод должен выглядеть точно так же, как в примере fb (при условии, что вы не обрабатываете другие схемы URL):

 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    return [facebook handleOpenURL:url]; 
}
  

http://developers.facebook.com/docs/guides/mobile/#ios

Комментарии:

1. Я поместил это в appdelegate, но теперь оно даже не вернется в мое приложение после входа в систему. Метод handleOpenURL вызывает объект facebook для его обработки, но теперь он даже не будет откатываться…

2. Обновили ли вы свой файл plist, как показано по ссылке выше.