Android 和 IOS 上的 Qt 会话管理

Posted

技术标签:

【中文标题】Android 和 IOS 上的 Qt 会话管理【英文标题】:Qt session management on Android and IOS 【发布时间】:2018-01-09 13:08:00 【问题描述】:

我目前正在使用 Qt Quick Controls 2 为 androidios 开发一个应用程序,该应用程序具有登录可能性。帐户凭据将存储到外部 SQL 数据库中。我已经弄清楚了如何与数据库交互,但我无法弄清楚如何在 Qt for Android 和 IOS 中使用会话,这样用户就不需要每次都输入登录凭据。

一种可能的方法是将凭据存储到手机本地的文件中,然后在每次启动应用程序时访问该文件。但是,我不确定这是否是最好和最安全的方法。

谢谢。

【问题讨论】:

【参考方案1】:

QSettings 类用于状态管理。 QSettings 信息通常存储在 Windows 上的系统注册表中,以及 macOS 和 iOS 上的属性列表文件中。这是使用 QSettings 存储/检索会话参数的原始示例代码。您可以扩展以包含所需的会话登录管理场景:

main.cpp

int main( int argc, char ** argv ) 
QApplication app( argc, argv );
app.setOrganizationName("myOrg");
app.setOrganizationDomain("myOrg.net");
app.setApplicationName("qsettings-test");
MyMainWindow mw;
mw.show();
return app.exec();

然后在你的源.cpp中

void MyMainWindow::readSettings() 
QSettings settings;
QString user = settings.value("UserName");
int lifTime = settings.value("sessionLifeTime").toInt();;
QByteArray state = settings.value("state", QByteArray())
                                               .toByteArray();
restoreState(state);


// ...... lots of your code 

void MyMainWindow::closeEvent(QCloseEvent* event) 
if (maybeSave()) 
    writeSettings();
    event->accept();
 else 
    event->ignore();




void MyMainWindow::writeSettings() 
    /* Save postion/size of main window */
    QSettings settings;
    settings.setValue("sessionLifeTime", 7);
    settings.setValue("UserName", user);
    settings.setValue("state", saveState());

您还可以使用 QSettings 类访问 INI 和 PLIST 配置文件,对于 Android,可以考虑在构建期间必须将 INI 文件复制到哪里(存储在 res 文件夹中并包含在 .pro 中) .

【讨论】:

以上是关于Android 和 IOS 上的 Qt 会话管理的主要内容,如果未能解决你的问题,请参考以下文章

移动设备(iOS 和 Android)的 Google 分析会话计数错误

在 Android(和 iOS)上使用 Qt 使用 openGL 绘制具有 3d 效果的 2d 线

Spring 上的 Apache Shiro 会话管理

android 上的 QML - C++ 是不是适用于业务逻辑? [关闭]

如何在 PHP 中管理从移动应用程序登录的用户的会话?

IOS上的Qt QML应用程序运行缓慢,JIT被禁用