Facebook api ios-sdk, делегаты не работают, fbDidLogin не вызывается - PullRequest
4 голосов
/ 17 марта 2011

У меня проблема с последней версией iOS SDK.Я успешно выполнил вход в систему, и приложение возвращается, но методы делегирования, такие как fbDidLogin и т. Д., Не вызываются.

Если все это пробовали в одном файле делегата без каких-либо контроллеров, и он заработал.Но если у меня есть несколько контроллеров, они больше не работают /

Я использую свой самописный класс FacebookFetchter для работы с Facebook.

    //FacebookFetchter.h
    #import Foundation/Foundation.h>
    #import "FBConnect.h"

    @interface FacebookFetchter : NSObject <FBDialogDelegate,FBSessionDelegate,FBRequestDelegate> {
        Facebook *facebook;
        FacebookFetchter *facebookFetcher;  }

    @property (nonatomic, retain) IBOutlet UIWindow *window;  @property (retain) Facebook *facebook; @property (retain) FacebookFetchter
*facebookFetcher; @end


    //  FacebookFetchter.m
    #import "FacebookFetchter.h"

    @implementation FacebookFetchter @synthesize facebookFetcher,facebook;

    -(void)login{
        NSLog(@"facebook login...");
        facebook = [[Facebook alloc] initWithAppId:@"..."]; //took the id out
        NSArray *permissions =  [[NSArray arrayWithObjects: 
                                  @"read_stream", @"offline_access", @"user_photos", @"user_photo_video_tags" , @"friends_photo_video_tags", @"friends_photos",@"friends_about_me",@"user_about_me",@"manage_friendlists",@"read_friendlists",@"user_birthday",@"friends_birthday", nil] retain];

        [facebook authorize:permissions delegate:self];

    }

    ...
    -(void)fbDidLogin {
        NSLog(@"Erfolgreich eingeloggt...."); } ...

    @end

В моем делегате я реализовал это, и я также настроил plist со схемой URL fbapp_id

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    NSLog(@"AppDelegate handleOpenURL");
    return [[[settings facebookFetcher] facebookFetcher] handleOpenURL:url];
}

там настройки моего контроллера представления:

//settings.h @interface Settings : UIViewController {
    FacebookFetchter *facebookFetcher;
    //Facebook *facebook; }

@property (retain) FacebookFetchter
*facebookFetcher;
- (IBAction)sync; @end

//settings.m @synthesize facebookFetcher;

//within this action the facebook login is called
- (IBAction)sync{
    NSLog(@"sync...");
    facebookFetcher = [[FacebookFetchter alloc] init];
    [facebookFetcher login]; }

Любые предложения ??

Спасибо!

Ответы [ 3 ]

3 голосов
/ 21 октября 2011

У меня только что была эта проблема, и я думаю, что, возможно, нашел ваше решение.Когда вы создаете приложение на Facebook, вы должны отредактировать настройки своего приложения, чтобы включить нативное приложение ios.Выбранный идентификатор пакета ios должен точно соответствовать вашему идентификатору пакета в приложении, которое вы создаете.Facebook заявляет, что они проверяют это до авторизации вашего приложения.Забавно, если вы удалите приложение facebook с устройства, а затем попытаетесь аутентифицировать его с помощью веб-браузера и, по-видимому, полностью обойдете эту «безопасность».Facebook не отправляет сообщение об ошибке, поэтому было очень интересно отследить.Я подумал, что выложу этот ответ в надежде спасти некоторых будущих разработчиков.Надеюсь, это поможет.

1 голос
/ 19 апреля 2012

У меня была такая же проблема. Я не установил разрешения на доступ к Facebook. Я написал дополнительную строку кода

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

Работает отлично.

1 голос
/ 03 апреля 2011

Я столкнулся с той же проблемой. Для меня это было решено снятием флажка «Приложение не запускается в фоновом режиме» в Info-листе.

...