iphone приложение делегат с логикой + facebook подключиться? - PullRequest
1 голос
/ 26 июля 2011

Я действительно застрял на этом, пожалуйста, помогите!

Я пишу приложение, которое реализует подключение к Facebook, поэтому при запуске приложения мне нужно проверить, есть ли у него действующий токен доступа к Facebook, а также проверить, действителен ли их appKey, который я предоставляю, до сих пор (я не знаю не хочу, чтобы одновременно регистрировалось более 1 аккаунта). так что должно произойти, это ..

Приложение запускается -> получить facebook / мой ключ доступа / токен от NSUserDefaults -> отправить мой appkey на сервер, чтобы убедиться, что оно все еще действует -> если оно действительно, то показать мой tableviewcontroller.

если в другом месте произойдет сбой (токен доступа к Facebook недействителен или их ключ приложения для моего приложения недействителен), то они будут перенаправлены на просмотр с помощью кнопки подключения к Facebook. после того, как они войдут оттуда, им будет показан tableviewcontroller

Я не знаю, как структурировать мой делегат приложения и просматривать контроллеры, чтобы это работало. Из того, что я знаю о подключении к Facebook, большинство вещей должно происходить в делегате, потому что методы приложения Facebook: handleOpenUrl: и fbDidLogin должны вызываться в делегате приложения, но если я делаю

self.window.rootViewController = self.tableController 

или

self.window.rootViewController = self.loginButtonViewController

до этого, тогда у меня не будет доступа к этим методам

Нужно ли вставлять делегата или что-то из контроллера представления обратно в делегат приложения? я понятия не имею ..

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
facebook = [[Facebook alloc] initWithAppId:@"MY_APP_ID"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
NSString *myKey;
if ([defaults stringForKey:@"myKey"]) {
    myKey= [[NSString alloc] initWithString:[defaults stringForKey:@"myKey"]];
}
else{
    myKey = [[NSString alloc] initWithString:@""];
}
//SEND THE KEY + FBID TO SERVER
if ([facebook isSessionValid] /*&& [response==OK]*/) {
    self.window.rootViewController = self.navController;
    //delegate data to EventsTableController
}
else{
    self.window.rootViewController = self.loginController;
}

[self.window makeKeyAndVisible];
return YES;
}
- (void)fbDidLogin {
NSLog(@"did login");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
NSString *myKey;
[facebook requestWithGraphPath:@"me" andDelegate:self];
if ([defaults stringForKey:@"myKey"]) {
    myKey= [[NSString alloc] initWithString:[defaults stringForKey:@"myKey"]];;
}
else{
    myKey= [[NSString alloc] initWithString:@""];
}
//NSString *validKey = [[NSString alloc] initWithString:@"OK"];
//Send myKey and validKey to server
//server will do its thang and send data

[self.window addSubview:self.navController.view];
[self.window makeKeyAndVisible];
}

заранее спасибо

1 Ответ

1 голос
/ 27 июля 2011

Что означает myKey?
В facebook.h метод isSessionValid использует только две переменные.(accessToken, expirationDate)

- (BOOL)isSessionValid {
  return (self.accessToken != nil && self.expirationDate != nil
       && NSOrderedDescending == [self.expirationDate compare:[NSDate date]]);
}

Вы должны были переместить вышеуказанный код в RootViewController.m, а не в AppDelegate.m, поскольку MainWindow.xib может распознавать только один RootView.
(В вашем случае вы хотели иметьRootView, navController, loginController)
См. эту страницу

Итак, я предлагаю вам переместить код авторизации в RootViewController.m
(и т. д. методы viewDidLoad или viewWillAppear)
Далее в RootViewController попробуйте изменить свое представление в зависимости от того, действителен ли сеанс.

И попробуйте снова!Это будет работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...