【问题标题】:What is the equivalent of iOS applicationWillTerminate in IBM MobileFirst Hybrid app?IBM MobileFirst Hybrid 应用程序中的 iOS applicationWillTerminate 等价物是什么?
【发布时间】:2016-03-01 05:21:03
【问题描述】:

场景:

如果应用程序终止,我想调用注销功能。我可以使用本机代码来做到这一点:

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

问题:

如何在 IBM mobilefirst 混合应用中做到这一点?

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

已编辑

首先,用户登录到应用程序,如果用户输入正确的用户名和密码,它会将用户身份添加到“loginRealm”中。

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

接下来,用户在不注销的情况下关闭应用程序。因此,当用户再次登录时,MFP 服务器将不会返回任何反馈,因为它会遇到此异常:

无法更改领域中已登录用户的身份 '登录领域'。应用程序必须先注销。

因此,我必须通过在适配器中将“loginRealm”设置为空来从 MFP 服务器注销用户;

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.updateUserInfo(); 之后立即让 WL.Client.isUserAuthenticated("loginRealm") 返回 true; ?可以去掉注销功能中reload app这行代码吗?

【问题讨论】:

    标签: ios ibm-mobilefirst


    【解决方案1】:

    我认为这是不可行的,因为该注销功能(在 MFP 中)将需要服务器连接(请求和响应),如果应用程序被终止,我认为这将导致不可预知的结果。

    请注意,尽管似乎不建议使用该功能? applicationWillTerminate when is it called and when not

    为了模拟它,您应该做的是在登录时注销,以便在打开应用程序时看起来应用程序已注销。您可以延长启动画面的持续时间,以便最终用户不会看到他/她已登录(如果会话在应用程序关闭和重新打开之间仍然存在),直到真正注销并然后您可以再次显示登录屏幕或任何其他所需的屏幕。

    【讨论】:

    • 感谢@Idan Adar,通过延长启动画面持续时间注销登录似乎是一种解决方案。但是,用户在启动画面中等待不是完全不友好的吗(用户是否登录?如何延长启动画面仅适用于 WL.Client.isUserAuthenticated("loginRealm" ) 是真的吗?我已经更新了我的问题,很抱歉之前没有详细解释我的情况。
    • 在链接中调用 customLogicCallback();在 wlCommonInit() 函数中用于延长启动画面的持续时间。你能给我一个用于检查 WL.Client.isUserAuthenticated("loginRealm") 是真还是假的 customLogicCallback 的示例代码吗?这是我坚持的部分。谢谢。
    • 出于安全考虑,用户每次关闭应用时都需要登录。
    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多