人升更新介绍#1.68.0 | 11/24 全新的成就、日历系统

欢迎更新到v1.68.0~

这个版本可能是比肩商店系统的一次重要更新。

首先是实现了远比之前版本完善的成就系统,其次也更新了日历视图,各个页面也有大大小小的优化。

开始正题之前,先发下这篇文章的总览:

总览

  1. 全新的成就系统,56种成就。
  2. 日历视图
  3. 金币详情
  4. 历史页面
  5. 其他改进
  6. To Do
阅读更多

人升开发日志#17 | 08/25 接入Firebase、Crashlytics

找到实习后,挺长一段时间没更新了。

《人升》的话,最近接入了Crashlytics,更新了金币系统等等。

回忆一下Crashlytics的接入过程~

为什么选择Crashlytics?

  • 不需要额外权限

    而国内很多崩溃统计向的都有不少权限要求,比如友盟统计必须依赖READ_PHONE_STATE等权限。

  • 国内也能访问

    是的,虽然Crashlytics属于Firebase,但是并没有用到Google的服务器。

  • 配置简单,不需要额外代码

    这一点我也很惊喜,只需要在Gradle文件里进行一些配置。项目代码甚至不需要任何变动。

  • 能直接在Crashlytics后台看到混淆前的堆栈信息

另外除了崩溃分析/管理功能外,其实还能在控制台看到活跃用户统计、用户行为分析、次日留存率、版本情况等等。

查看这些信息感觉很有助于维持更新兴趣~

总体来讲,感觉Crashlytics很适合独立开发者使用。

接入Firebase以及Crashlytics

Crashlytics已经被并入了Firebase体系,所以要先接入Firebase。

Fabric虽然还能直接加入Crashlytics,但是仅提供支持到2020年3月31号,官网也在建议用户迁移至Firebase。

接入Firebase可以参考官方教程

流程可以概述为:

  1. 创建Firebase项目

  2. 注册应用,上传签名的SHA码

    这两步在官网跟着流程走就可以,就不详细说明了。

  3. 下载 google-services.json放到项目的模块目录(一般是app文件夹里)中。

  4. 项目级gradle文件里加入Firebase和Crashlytics配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    buildscript {
    ...

    repositories {
    // 加上这两个仓库地址
    google()
    maven {
    url 'https://maven.fabric.io/public'
    }
    }
    dependencies {
    classpath 'com.google.gms:google-services:4.3.0' // Google 服务
    classpath 'io.fabric.tools:gradle:1.29.0' // Crashlytics 插件
    }
    }
  5. 模块级gradle文件里加入:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    apply plugin: 'com.google.gms.google-services'
    apply plugin: 'io.fabric'

    dependencies {
    ...

    /** firebase **/
    implementation 'com.google.firebase:firebase-core:17.0.0'
    implementation 'com.crashlytics.sdk.android:crashlytics:2.10.1'

    }

    到这一步为止,其实已经集成完毕了。

  6. (可选)如果你的应用开启了代码混淆的话,建议在proguard-rules.pro文件里加入以下规则,以便拿到混淆前的堆栈信息:

    1
    2
    3
    4
    5
    6
    7
    # Crashlytics
    -keepattributes *Annotation*
    -keepattributes SourceFile,LineNumberTable
    -keep public class * extends java.lang.Exception
    -keep class com.crashlytics.** { *; }
    -dontwarn com.crashlytics.**

  7. 测试一下崩溃吧

    在相应的地方可以用以下语句制造一个崩溃,然后过几分钟后,前往Firebase的后台查看崩溃信息吧~

    1
    Crashlytics.getInstance().crash() // 制造一个崩溃

更多玩法

更多Crashlytics的用法可以参考官方的页面,比如可以记录try-catch住的异常,自定义一些key-value信息方便分析崩溃等等。

人升开发日志#15 | 06/16 夜间模式

收到多次需要夜间模式的反馈,就研究了一下要怎么实现~

本以为需要手动替换Theme,实际上Android已经提供了相应的功能。

实际使用之后才发现,Fragment能实现到和Activity在使用上分辨不出的效果。

依赖

首先是依赖,需要使用appcompat:(我这里用的androidx库,support库同理)

1
implementation 'androidx.appcompat:appcompat:1.1.0-beta01'
阅读更多

人升开发日志#15 | 04/02 用Fragment改造设置页面

之前使用Fragment都是配合ViewPager或者配合TabLayout+ViewPager,基本没用过FragmentManager。

实际使用之后才发现,Fragment能实现到和Activity在使用上分辨不出的效果。

布局文件

其实我们要实现的效果很简单,一个主Fragment显示各个设置的大类(比如显示设置、小部件设置等),点击之后切换到不同的Fragment显示,然后那些Fragment只能回退到主Fragment,主Fragment再回退就是结束Activity。

大概这样:

Fragment的布局文件正常就好。

Activity要怎么样呢?我们的Activity本身是不需要任何内容的,只需要充当一个容器的作用就行:

activity_setting.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/background_color"
android:fitsSystemWindows="true"
tools:context=".activities.SettingActivity">

</LinearLayout>
阅读更多

人升开发日志#14 | 03/21 几个小问题的解决

ViewPager + Fragments 导致的选项菜单错乱解决

原先的Toolbar实现

在Fragment中获取Toolbar这个View,然后调用Activity的setSupportActionBar(toolbar)方法。

然后实现Option菜单的方法:在Fragment中设置setHasOptionsMenu(true),然后重写fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater)方法。

出现的问题:似乎是因为ViewPager的缓存机制,导致切换Fragments切换的时候可能出现菜单错乱的情况。

解决:把Toolbar当做控件使用

MainActivity.kt

1
2
3
4
5
6
7
8
9
10
11
12
13
fun initToolBar(toolbar: Toolbar) {
//setSupportActionBar(toolbar) 注释掉这条

currentToolbar = toolbar
val toggle = ActionBarDrawerToggle(
this, drawer_layout, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close)
drawer_layout.addDrawerListener(toggle)
nav_view.setNavigationItemSelectedListener(this)
}

fun getCurrentToolbar(): Toolbar? {
return currentToolbar
}

Fragment.kt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private fun initToolbar(view: View) {
//设置toolbar
mToolbar = view.findViewById(R.id.toolbar)
(activity as MainActivity).initToolBar(mToolbar)

// 填充菜单
mToolbar?.inflateMenu(R.menu.main)
mToolbar?.setOnMenuItemClickListener { item ->
when (item.itemId) {
R.id.action_sort -> {
// do something
true
}
else -> true
}
}
}
阅读更多

人升开发日志#13 | 03/21 迁移至AndroidX

AndroidX是 Google 发布的对原来的支持库整理后的新一代支持库。并且原来的支持库的最后版本将停留在“28.0.0”,迁移是迟早的事情。

主要动机还是想要用一个框架,结果它只支持AndroidX,就这样决定开始迁移了。

利用Android Studio迁移

需求:Android Studio版本3.2以上

操作:Refactor -> Migrate to Androidx

IDE会询问是否要备份一份当前的项目,并且会告知可能需要你手动解决一些项目Error。

继续操作,IDE会搜索所有的要改变的依赖路径,然后点击DO REFACTOR按钮吧。

阅读更多

人升开发日志#12 | 01/17 图表

本文讲讲怎么用 MPAndroidChart 框架实现折线图、柱形图、饼图,并且进行样式设置,达到和宣传图差不多的效果。

一开始看到 MPAndroidChart 的各种图表介绍图感觉很好看,但是直接New一个相应图表,仅仅填充数据的话,样式稍微有些丑。经过一番阅览文档才把样式调整得好看些。所以就写了这篇文章记录下。

APP 里实现的最终效果:

引入框架

首先是引入框架:

https://github.com/PhilJay/MPAndroidChart

Gradle设置一下:

1
2
3
4
5
6
7
repositories {
maven { url 'https://jitpack.io' }
}

dependencies {
implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0-alpha'
}
阅读更多

人升LifeUp 公告与详细介绍

请点击此处访问新站点

公告

已知bug

  • 领取成就奖励时,显示的时间不正确。

    重新进入页面可以查看正确的时间。下个版本会修复。

更新速度减缓

因为近期我们两位开发者都需要赶毕业设计/论文进度😅

所以这段时间的更新速度会稍微减缓。

后续的一些更新目前计划是关注于增强“游戏化”方面,还有实现之前采纳的用户建议。

也欢迎大家继续提出各种建议~


图标

应用图标感觉需要一波更新,但我们这边暂时没什么想法(:з」∠)

如果你有意贡献图标/想法的话,欢迎邮件联系~


使用指南(施工中)

事项篇

新建事项的各个选项介绍、新建各种类型的事项、清单管理与排序、稍后阅读功能


版本更新

v1.70.x更新介绍

简洁模式、图片附件、WebDAV配置方法、撤销优化、动态显示优化

v1.69.0更新介绍

子任务、逾期处理、自定义排序、冻结、编辑团队事项

v1.68.0更新介绍

新成就系统


目录

  1. 应用简介
    1.1 情景介绍
    1.2 已知问题
    1.3 更新计划
    1.4 绿色应用
    1.5 盈利方式
    1.6 上架市场
    1.7 关于开源
  2. 功能介绍
    2.1 新成就系统
    2.2 稍后阅读
    2.3 商店系统
    2.4 社区
  3. 其他
    3.1 更新日志
    3.2 捐赠名单

应用简介

情景介绍

升级你的人生

简单一句话介绍这个应用的特色,就是“游戏化的待办事项应用”

用一个情景详细地介绍游戏化:

完成了一篇文章,打开应用,在“写一篇文章”的事项前打上勾,标记完成。

此时你获得了一些「学识」和「创造」200经验值,并且「学识」升了一级。

应用还弹出了“成就解锁!法师”的成就解锁提示框。

此外,还获得了10个金币

点击商店,查看为自己设置的奖励商品列表。

斟酌半刻,你购买了耗费8金币的奶茶。然后前往仓库,使用了刚刚购买的奶茶。

于是现实中,可以心满意足地点开外卖应用下单奶茶奖励自己。

该情景主要只涵盖了应用的游戏化部分,除此之外还有社区、统计、日历、桌面小部件等功能,会在后面部分介绍。


更新计划

2019/10/31:因为目前在实习+准备毕设,稍微将原本大概7-14天一更的频次调整到14-21天一更


绿色应用

并且,《人升》无开屏、无内置广告、暂无内购。体积也一直尽量保持在6mb左右。

并且通过了Android 绿色应用公约 3.0验证无需读取手机状态、甚至无需外部存储空间权限

理论上运行无需任何权限,只为了一些可选功能申请了一些权限:

  • 查看网络连接、查看WLAN连接、拥有完全的网络访问权限

    为了实现登录、社区等功能。

    如果完全把《人升》当作一个离线工具使用,甚至可以关闭这些权限。

  • 运行前台服务

    为了实现桌面小部件完成事项的功能。

    同理,如果不需要用到桌面小部件,该权限也可以关闭。

  • 日历读写权限

    只有将提醒方式改为“系统日历提醒”的时候才会动态申请该权限。

    如果不需要“系统日历提醒”功能,该权限也可以关闭。

  • 其他权限

    一些其他权限诸如Play Store相关的,其实是第三方SDK申请的。

    比如Google授权登录、QQ授权登录。


盈利方式

暂时,《人升》在国内是用爱发电感谢诸位的捐赠让我们走下来。


在Google Play市场,我们面向海外发布了价格为$0.99的买断版本。

捐赠过的用户可以向我们发送邮件获取Google Play的兑换码。


并且有意把这个版本当作以后《人升》实现“终身会员”的雏形,

目前的所有基础功能都不会需要会员

部分比较偏的需求,或者是需要消耗服务器资源的需求,可能会选作是”终身会员“的福利。

有意把”会员“的购买界面做得像购买游戏DLC一样😂

并且计划实现会员前捐赠的所有用户都能获得相应的会员兑换码。


🧐小谈一下押金制,目前也有一部分用户出于好意提议我们未来采用押金制。

但就我个人而言,觉得押金制有些功利(无论是对于开发者还是使用者)。

对于使用者来说,使用实际的金钱惩罚,来逼迫自己冲动地完成或者是坚持某个目标。

有种自我绑架的意味?(胡言乱语)对于自己的提升,是肯定不及兴趣和单纯的自制来得多的。

甚至也有可能起反作用,对自己本来想要做的事情起了厌恶之情。

又或者是,为了避开惩罚,就算没完成也硬是点下完成按钮。

逐渐偏离最初的目标,从坚持完成某个事,到为了不受惩罚而完成某件事。


当然,这一些都因人而异,选择自己合适的方式即可😜。

只是《人升》基于以上原因不可能会采用押金制。


上架市场

目前,我们官方上架并且维护更新的应用市场有:酷安、魅族、小米、华为、Google Play、应用宝、阿里应用分发(含:豌豆荚、PP 助手、YunOS 应用商店、UC应用商店等)

华为应用市场也拿回了应用管理权,也可以在华为应用市场上更新人升了。

并且在这些应用市场上架的都是相同的包名,完全可以跨市场升级~

Google Play上的Pro版差异

  • 去掉了“捐赠”入口
  • 去掉了“应用内更新提示”
  • 自定义卡片背景,自定义商品“使用”按钮文本
  • (计划)更多增值内容,如Google Drive同步


关于开源

之前客户端的代码是在Github上完全开源的,

但是经历了被人恶意篡改、插入广告,上架到一些市场抢占包名的事情之后,

我们已经把客户端的代码闭源了。


以后,可能会开源部分代码或者应用架构等

阅读更多

人升LifeUp 常见问题

请点击此处访问新站点

其他链接

常见问题

  • 如何撤销完成事项?
  1. 在完成时,点击底部提示框的“撤销”按钮。

  2. 侧边栏历史页面,点击撤销按钮。

  3. 日历页面的已结束模块,点击撤销按钮。

    可以撤销任意时刻的无重复待办事项,以及今天完成的重复事项

  • 可以设置经验值或者金币惩罚吗?

    可以的,默认也启用了经验值惩罚。金币惩罚默认没启用。

    可以在侧边栏-设置-自定义设置里自由设定。

    😅 不知道为什么这点一直有人反馈建议(还没留联系方式,没法回复),后续会加强对“惩罚”的展示效果。

  • 如何隐藏掉已经完成的事项(其实是未开始的事项)?

    在主页(即告示页面),点击右上角的菜单栏(三个点),再点击筛选,选中只显示今天事项即可。

  • 如何建立指定周几的待办事项?如每周一、二、三。

    点击这里查看

  • 如何下架商品?

    商店页面,长按商品,然后选择顶部的垃圾桶按钮。

  • 指定时间没收到提醒?

    应用内其实也有说明,由于独立应用权限有限,默认的提醒方式会受系统限制,可能关了后台就失效了。

    可以尝试更换为系统日历提醒方式(设置-事项设置,更换后,可以查看系统日历app有没有成功插入提醒时间。

  • 想初始化“我的”页面中的逾期、放弃数

    这里的数字统计是基于历史记录的,可以前往侧边栏-历史页面,删除相应的错误记录。

  • 什么是目标重复次数和计数事项次数?

    点击这里查看

  • 我不想用社区,可以隐藏吗?

    可以前往侧边栏-设置-显示设置内隐藏社区,需要重启应用生效~