Проблемы с SDK FBConnect от Facebook на iOS

Я использую FBConnect sdk для публикации сообщений в профиле пользователя через мое приложение. У меня ряд проблем с этим:

Когда соответствующий код запускается в первый раз на устройстве, пользователь перенаправляется, как и хотел, в приложение / веб-сайт facebook, который просит его авторизовать его. . если пользователь авторизует его, он возвращается обратно в приложение, которое открывает контроллер представления «Подключиться к facebook», который просит пользователя войти в систему. Это странно, поскольку пользователь уже вошел в систему, иначе как он мог авторизовать приложение ? но я думаю, это может быть нормально, поскольку он еще не вошел в систему через приложение. после входа он ничего не делает. только во второй раз, когда код запускается, после того, как он авторизовал приложение, пользователь получает диалог публикации.

Если пользователь не авторизовал приложение, когда оно возвращается в мое приложение после диалога авторизации, он запрашивает пользователь должен войти в систему (как если бы он авторизовался) и ничего не делает после того, как он вошел в систему. Только при втором запуске кода открывается диалоговое окно авторизации с опциями «Авторизовать» и «Покинуть приложение» вместо «Авторизовать» "&" Не авторизовать "/" Разрешить "&" Не разрешать ".

Кроме того, если пользователь удалил свою авторизацию через настройки своей учетной записи на facebook, вместо того, чтобы просто попросить его повторно авторизовать ее , появится диалоговое окно facebook (вместо диалогового окна публикации / авторизации) с сообщением: «Произошла ошибка. Повторите попытку позже». Попытка позже не помогает. он будет появляться всегда, даже если вы перезапустите приложение. единственный способ избавиться от этого - переустановить приложение, что приведет к повторному открытию диалогового окна авторизации.

Итак, вот чего я хочу добиться:

  1. После того, как пользователь авторизует приложение, он не пришлось бы снова входить в систему.
  2. После того, как пользователь авторизует приложение, сразу же появится диалоговое окно публикации, и ему не придется повторно запускать код (который, кстати, запускается кнопкой).
  3. Если пользователь отменит авторизацию приложения, ему снова будет предложено диалоговое окно авторизации, а не диалоговое окно с ошибкой
  4. . Если он откажется от авторизации, я вызову функцию, которая отображает ошибку / и т. Д.

Вот соответствующий код:

MyViewController.m

- (void)shareOnFacebook
{
    Facebook *facebook = [[Facebook alloc] initWithAppId:myAppID];
    [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] setFacebook:facebook];
    [facebook release];
    facebook = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] facebook];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }
    if (![facebook isSessionValid]) {
        [facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil] delegate:(MyAppDelegate *)[[UIApplication sharedApplication] delegate]];
    }

     NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
     //Giving the dictionary some parameters for posting defaults
     [facebook dialog:@"feed" andParams:dictionary andDelegate:self]; //Note: we have 2 different delegates! appDelegate for connections & url switching, and self for dialogs
}

MyAppDelegate.h

@interface MyAppDelegate : NSObject <UIApplicationDelegate, FBSessionDelegate, FBDialogDelegate>
{  
    Facebook *facebook; // kept for facebook sharing, accessed only from MyViewController although delegate methods are handeled in here
}
@property (nonatomic, retain) Facebook *facebook;

@end

MyAppDelegate.m

- (void)fbDidLogin
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}

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

Возможно ли, что мне не хватает пары функций делегата в MyViewController? Поскольку я вижу, что по какой-то причине я отметил, что это реализует протокол FBDialogDelegate, хотя он не реализует никаких функций оттуда.

Я был бы очень рад, если бы вы, ребята, мне помогли, так как это очень расстраивает для мне. Я не нашел ничего об этом в Интернете, и мне кажется, что я здесь утону.

Привет заранее!

8
задан tomdemuyt 25 August 2011 в 17:55
поделиться