Bixilon/UniThen
GitHub: Bixilon/UniThen
一款轻量、无广告、无追踪器的 Android 应用,用于替代臃肿的 UniNow 官方应用以快速完成课程 QR code 签到。
Stars: 1 | Forks: 0
# UniThen



这款 Android 应用程序用于为 [UniNow](https://uninow.com/) 课程进行 QR code 签到(以及其他一些功能)。
它可以用于由其托管的任何数字预订系统 (DBS),例如 [ZHS München](https://kurse.zhs-muenchen.de)。
本应用**未**与预订系统的提供商/开发者 UniNow GmbH 存在任何附属关系。
如果*此*应用出现问题,请联系[我](https://bixilon.de),而不是 UniNow。他们无法也不会为您提供帮助。
## 功能
- 支持多个站点和账户
- QR code 签到(展示和扫描)
- 列出课程/预约
- 速度极快,无广告,无追踪器
- 简单且体积小(约 4MB;大部分体积来自于 [zxing-cpp](https://github.com/zxing-cpp/zxing-cpp) 的 QR code 扫描功能)
- 完全离线(仅需认证一次)
## 下载
[
](https://f-droid.org/packages/de.bixilon.unithen)
最新版本发布在 [gitlab releases](https://gitlab.bixilon.de/bixilon/unithen/-/releases) 和 [F-Droid](https://f-droid.org/packages/de.bixilon.unithen) 上。F-Droid 的构建是可复现的,
并且也使用我的密钥进行了签名 (SHA512: `f44dcdebfb54333fa205ff11eaa5aa1f47cde8217dd63a9fd979cd1fcf6d4241`)。推荐通过 F-Droid 下载,这样您就无需担心更新问题。
(目前此应用仅支持 Android 9+)。
这里有一个 [GitHub 镜像](https://github.com/Bixilon/UniThen)。它仅用于代码保留,请勿在此处报告问题或提交 pull request。
## 截图
| **课程概览**  | **QR Code 签到**  |
|:-----------------------------------------------------------------------------------------------------:|:-----------------------------------------------------------------------------------------------:|
| **参与者列表**  | **QR Code 扫描**  |
## 原因
其实,原来的 [UniNow 应用](https://play.google.com/store/apps/details?id=de.mocama.UniNow) 还不错(努力做到隐私友好,支持离线使用),但确实有几点让我很困扰:
完成简单的任务需要大量的用户交互(例如,当我想出示签到票据时):
打开应用 -> (等待) -> 不,我对改进应用不感兴趣 -> (必须看广告) -> My Studies -> ZHS -> (等待) -> 找到课程 -> (等待) -> 向下滚动 -> QR Code -> (等待)
而且,我不希望手机里有任何我并非必需且非开源*的东西。
如果 UniNow 的相关人员看到这个,请在封禁此应用**之前**与我联系。我无意(通过此应用)损害你们的利益。
## 底层原理
(一切尽可能保持简单)
- 使用 Webview 加载 UniNow 网站并嗅探(及存储) cookie
- 获取用户和页面详细信息,并从 html 中提取它们(这可以通过专门的 GraphQL 查询来改进;但显然目前并不存在)
- 通过 GraphQL 获取课程和预约 ([Schema](./doc/UniNow.graphql))
- 将所有内容存储在您设备的 SQL 数据库中
- QR code 扫描:所有注册用户的本地副本,用于离线同步的队列,以及用于搜索的 [fts4](https://www.sqlite.org/fts3.html)(实际上有点复杂)
## 出现故障
请提交一个 [issue](https://gitlab.bixilon.de/bixilon/unithen/-/issues)(您必须先注册一个账户),或者发一封简短的邮件到 `bixilon [a.t] bixilon [dot.] de`。我也欢迎任何反馈(无论正负):smile:
每个使用场景都不同,我的场景只是为体育课程签到,而且基本可以离线完成。
## 发布(写给自己的备忘)
IntelliJ 会破坏可复现构建,请使用以下方式构建:
1. 更新 `app/build.gradle.kts` 中的 version code
2. 创建 fastlane 更新日志
3. 使用版本信息更新 fdroid.txt(然后 fdroid 会自动构建并部署它)
4. `git tag v1.2.3 -a`(提供更新日志)
5. `./gradlew app:assembleRelease`
6. `apksigner sign --ks ~/Dokumente/androidkey.jks --alignment-preserved app-release-unsigned.apk` (`app/build/outputs/apk/release/app-release-unsigned.apk`)
7. 在 lipstick 中创建 package(名称:`apk`,版本:`1.2.3`,文件名:`app-release.apk`)
8. `git push v1.2.3` 并使用 package 创建发布
标签:Android应用, 二维码, 后台面板检测, 开源, 日程管理, 校园服务, 轻量级应用