2015-11-27 4 views
0

Сценарий:Что такое эквивалент приложения iOSWillTerminate в приложении IBM MobileFirst Hybrid?

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

- (void)applicationWillTerminate:(UIApplication *)app 
{ 
    // Run Logout function 
} 

Проблема:

Как сделать это в IBM mobilefirst гибридных приложений?

// ******************************************** ****

Edited

Прежде всего, пользователь Войти в приложение, если ключ пользователя в правильный идентификатор пользователя и пароль, он добавит UserIdentity в «loginRealm».

WL.Server.setActiveUser("loginRealm", userIdentity); 

Далее пользователь закрывает приложения без выхода из системы. Таким образом, когда пользователь Войти в другой раз, сервер MFP не возвращает никакого воздействия, так как это ударит это исключение:

не может изменить самобытности уже зарегистрированного пользователя в области 'loginRealm. Приложение должно выйти из системы в первую очередь.

Следовательно, я должен выйти из системы с сервера MFP, установив «loginRealm» в null в адаптере;

WL.Server.setActiveUser("loginRealm", null); 

Вышеупомянутая строка кода находится в функции выхода, определенной в файле authentication-config.xml.

Устройство на стороне клиента выполняет эту строку кода, и оно вызывает функцию выхода из системы. Кроме того, он будет перезагрузить приложение на успех:

WL.Client.logout('loginRealm', { 
    onSuccess: WL.Client.reloadApp 
}); 

Шаги, которые я пробовал:

1) В WlcommonInit() Я добавил WL.Client.updateUserInfo(); и если WL.Client.isUserAuthenticated ("loginRealm") возвращает true, я выхожу из системы с сервера. Однако WL.Client.isUserAuthenticated ("loginRealm") всегда возвращает false. Это связано с тем, что для того, чтобы флаг стал истинным после WL.Client.updateUserInfo(); требуется некоторое время (от 30 секунд до 2 минут). Таким образом, мой логин все еще терпит неудачу и попадает в ту же ошибку.

2) Я попытался выйти из системы во время нажатия кнопки входа в систему. Но приложение обновится и снова вернется на страницу входа из-за reloadApp. Код выхода, который я получаю с веб-сайта IBM mobilefirst. Поэтому пользователю необходимо нажать и набрать 2 раза, чтобы войти в главное меню.

WL.Client.logout('loginRealm', { 
    onSuccess: WL.Client.reloadApp 
}); 

Я делаю это неправильно? Или есть ли какие-либо другие методы для получения WL.Client.isUserAuthenticated («loginRealm») немедленно возвращает true после WL.Client.updateUserInfo(); ? Можем ли мы удалить строку приложения reload для кода в функции выхода из системы?

ответ

1

Я не думаю, что это выполнимо, потому что для этой функции выхода (в MFP) потребуется подключение к серверу (запрос и ответ), и если приложение будет убито, я думаю, что это приведет к непредсказуемым результатам.

Обратите внимание, что в любом случае не рекомендуется использовать эту функцию? applicationWillTerminate when is it called and when not

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

+0

Благодаря @ Идан Адар, выход из системы при входе в систему путем продления продолжительности экрана заставки выглядит как решение. Тем не менее, не было бы совершенно неудобно для пользователя ждать в заставке (либо пользователь является логином, либо нет? Как продлить экран заставки только в случае, когда WL.Client.isUserAuthenticated ("loginRealm") Верно? Я обновил свой вопрос, извините за то, что не объяснил мой сценарий, подробно описанный ранее. – user1872384

+0

См. здесь: https://developer.ibm.com/mobilefirstplatform/documentation/getting-started-7-1/foundation/ advanced-client-side-development/common-ui-controls/# splashscreen –

+0

Внутри ссылки он вызывает customLogicCallback(), в функции wlCommonInit() для продления продолжительности заставки. Можете ли вы дать мне пример кода customLogicCallback для проверка WL.Client.isUserAuthenticated («loginRealm») является истиной и ложью? Это та часть, в которой я застрял. Спасибо. – user1872384

Смежные вопросы