iOS - войти через веб-сервис - PullRequest
1 голос
/ 30 сентября 2011

В моем приложении есть разделенное представление, содержащее данные, полученные через вызов WS. Чтобы получить эти данные, пользователь должен войти в систему. Чтобы войти, я модально представляю экран входа в систему при загрузке приложения. После ввода учетных данных я распечатываю результат вызова WS isLoggedIn. Это все работает отлично и денди.

Проблема в том, что, находясь на экране входа в систему, isLoggedIn возвращает сообщение о том, что пользователь успешно вошел в систему (включая идентификатор сеанса), но когда я закрываю экран входа в систему, каждый вызов WS завершается неудачно, поскольку пользователь не вошел в систему. Идентификатор сеанса совпадает, и WS принимает вызовы, но iPad, похоже, удаляет сеанс после закрытия экрана входа в систему. Это приводит к следующим журналам:

2011-09-30 09:37:05.335 DSApp[366:707] url call: http://***/ipadwebservice.asmx/authenticateUser?username=user&password=pass
2011-09-30 09:37:05.508 DSApp[366:707] Call succesful. 
2011-09-30 09:37:05.509 DSApp[366:707] Logged in successfully.
2011-09-30 09:37:05.511 DSApp[366:707] Dismissing LoginView.
2011-09-30 09:37:08.644 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getChildFoldersByFolderID?folderId=-1
2011-09-30 09:37:08.649 DSApp[366:7d0f] Call failed. (Reason: User not logged in!)
2011-09-30 09:37:09.493 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getDocumentsByFolderId?folderId=-1
2011-09-30 09:37:09.497 DSApp[366:7d0f] Call failed. (Reason: User not logged in!)

Еще одна странная вещь заключается в том, что когда я жестко кодирую данные для входа в систему и вызываю метод applicationDidFinishLaunching, все работает отлично, и все вызовы WS успешно принимаются.

Буэно:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
# warning hardcode login
    [WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"];

    self.window.rootViewController = self.splitViewController;

    //login
    LoginViewController *loginView = [LoginViewController new];
    loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self.splitViewController presentModalViewController:loginView animated:YES];
    [loginView release];
}

Нет Буэно:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
    # warning hardcode login
        //[WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"];

        self.window.rootViewController = self.splitViewController;

        //login
        LoginViewController *loginView = [LoginViewController new];
        loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
        [self.splitViewController presentModalViewController:loginView animated:YES];
        [loginView release];
    }

Ответы [ 2 ]

0 голосов
/ 08 октября 2011

Совпадение идентификатора сеанса и WS принимает вызовы, но iPad кажется, удаляет сеанс после закрытия экрана входа в систему.

Есть ли кусок кода, который может "удалить" сеанс? Если так, поставьте точку останова и посмотрите, вызывается ли она.

В противном случае, я предполагаю, что, в конце концов, вы не правильно отправляете идентификатор сессии вместе с запросом.

0 голосов
/ 07 октября 2011

Ваш пример кода не совсем понятен, но вы создали свой экземпляр WebservicesController в своем контроллере входа в систему?

Причина, если вы отпускаете свой контроллер входа в систему, ваш WebservicesController, вероятно, освобождается, как и аутентификация ...

И это должно объяснить, почему он работает в приложении Delegate

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