情境:
如果应用程序终止,我想调用注销功能。我可以使用本机代码来完成它:
- (void)applicationWillTerminate:(UIApplication *)app
{
// Run Logout function
}
问题:
如何在IBM mobilefirst混合应用程序中执行此操作?
// ********************************************* ***
被修改
首先,用户登录到应用程序,如果用户密钥在正确的用户ID和密码中,则会将userIdentity添加到" loginRealm"。
WL.Server.setActiveUser("loginRealm", userIdentity);
接下来,用户无需注销即可关闭应用。因此,当用户再次登录时,MFP服务器将不会返回任何反馈,因为它将触发此异常:
无法更改域中已登录用户的身份 ' loginRealm&#39 ;.应用程序必须先注销。
因此,我必须通过设置" loginRealm"来从MFP服务器注销用户。在适配器中为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分钟)使标志变为true。所以我的登录仍然失败并遇到同样的错误。
2)我尝试在用户点击登录按钮期间注销用户。但是由于reloadApp,应用程序将刷新并再次返回登录页面。我从IBM mobilefirst网站获得的注销代码。因此,用户需要单击并键入2次才能登录主菜单。
WL.Client.logout('loginRealm', {
onSuccess: WL.Client.reloadApp
});
我做错了吗?或者是否有任何其他方法可以在WL.Client.updateUserInfo()之后立即返回WL.Client.isUserAuthenticated(" loginRealm"); ?我们可以在注销功能中删除重新加载应用程序代码行吗?
答案 0 :(得分:1)
我认为这是不可行的,因为退出功能(在MFP中)将需要服务器连接(请求和响应),如果应用程序被杀死,我认为它会导致不可预知的结果。
注意虽然似乎不建议使用该功能吗? applicationWillTerminate when is it called and when not
为了模拟它,您应该做的是登录登录,以便在打开时看起来应用程序已注销。您可以延长启动画面的持续时间,以便最终用户不会看到他/她已登录(如果会话在关闭和重新打开应用程序之间仍处于活动状态),直到真正注销并且然后您可以再次显示登录屏幕或任何其他所需的屏幕。