Facebook SDK iOS для входа с установленным приложением Facebook

ОБНОВЛЕНИЕ: я понял, что нижеприведенная проблема возникает, только если пользователь уже предоставил Facebook доступ к моему приложению, а затем переустанавливает мое приложение. Когда пользователь в первый раз выбирает кнопку Facebook в моем приложении, он обращается к приложению Facebook для получения аутентификации, но, поскольку статус аутентификации все еще сохраняется в приложении Facebook, он сразу же возвращается в мое приложение без объяснения пользователю, и postToFacebookWall метод не работает.

ОБНОВЛЕНИЕ 2: я закончил тем, что реализовал решение, найденное здесь:Как авторизовать пользователя через ДИАЛОГ с НОВЫМ API Facebook Connect iOS? и избегал приложения Facebook. Safari лучше, потому что, по крайней мере, пользователь получает сообщение о том, что он будет входить в систему. Тем не менее, как и прежде, в диалоге подачи по-прежнему происходит сбой в первый раз.

У меня есть то, что должно быть общей проблемой, но я пока не смог найти решение. Обратите внимание, что мое приложение доступно только для iOS 5 и выше.

У меня есть приложение с кнопкой Facebook для публикации на стене пользователя. Когда кнопка нажата, приложение проверит, не дало ли пользователь разрешение приложению публиковать на стене. Если они есть, появляется всплывающее окно с Диалогом Подачи с информацией на стене. В противном случае Safari будет открыт, и пользователю будет разрешено войти в систему. После входа они будут возвращены в приложение, и появится диалоговое окно Feed Feed.

Это работает на симуляторе и на моем устройстве, если приложение Facebook не установлено. Если приложение Facebook установлено, пользователь попадает в приложение Facebook, но затем немедленно возвращается в исходное приложение, не позволяя пользователю что-либо делать. Диалоговое окно Feed появляется, но оно полностью пустое и закрывается автоматически. При повторном нажатии кнопки Facebook откроется диалоговое окно «Лента новостей», как и должно быть после того, как пользователь разрешит приложению публиковать сообщения на своей стене.

Я в значительной степени следовал инструкциям, найденным здесь:http://developers.facebook.com/docs/mobile/ios/build/#implementsso

и здесь:http://developers.facebook.com/docs/reference/dialogs/feed/

В AppDelegate у меня есть следующий код:

- (void)loginToFacebook
{
    // Set up facebook
    self.facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID" andDelegate:self];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    if ([defaults objectForKey:@"FBAccessTokenKey"] 
        && [defaults objectForKey:@"FBExpirationDateKey"]) {
        self.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        self.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    if (![self.facebook isSessionValid]) {
        [self.facebook authorize:nil];
    }
}

// This is an FBSessionDelegate protocol method
// that gets called after a successful login
- (void)fbDidLogin 
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[self.facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[self.facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];

    [[NSNotificationCenter defaultCenter] postNotificationName:@"POST_TO_FACEBOOK_WALL" object:nil];
}

// This is a UIApplicationDelegate protocol method
// It is called when safari is dismissed
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{
    return [self.facebook handleOpenURL:url]; 
}

Единственное различие между этим и примером кода состоит в том, что я добавил NSNotification, который принимается моим контроллером представления, где у меня есть следующий код:

    - (void)facebookButtonPressed:(UIControl*)sender 
    {
        Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook];

        if (![facebook isSessionValid])
        {
            // Login to facebook if not already logged in
            [(AppDelegate*)[[UIApplication sharedApplication] delegate] loginToFacebook];
        }
        else 
        {
            [self postToFacebookWall];
        }

    }

    - (void)postToFacebookWall
    {
        Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook];

        /*Facebook Application ID*/
        // TODO: Get this either from the AppDelegate facebook property or the info plist
        NSString *client_id = @"YOUR_APP_ID";

        NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
  kAppId, @"app_id",
  @"http://developers.facebook.com/docs/reference/dialogs/", @"link",
  @"http://fbrell.com/f8.jpg", @"picture",
  @"Facebook Dialogs", @"name",
  @"Reference Documentation", @"caption",
  @"Using Dialogs to interact with users.", @"description",
  nil];

        [facebook dialog:@"feed" andParams:params andDelegate:self];
    }

Кто-нибудь знает, как исправить мою проблему? (Также, если неясно, YOUR_APP_ID заменяется идентификатором моего приложения в моем коде).

Ответы на вопрос(2)

Ваш ответ на вопрос