从找到想法到完成的应用程序

图片


可能很多人都在考虑如何在成品中实现他们的知识。 有人多一点,有人少一点时间。 我想与社区分享我如何正确执行此操作的经验和愿景,但是它并不总是可行的。


搜寻想法


在此阶段,我们需要决定要创建什么。
为此,请生成想法,将其写下来(例如,在trello中),对竞争对手进行评估-Google并搜索应用程序商店。


图片


然后,我们尝试从时间,可能的财务投资以及必要的知识方面清醒地评估我们的能力。 即 制造Eventbrite或Uber杀手不是一个好主意。


研究成果


他们分为定性和定量,例如市场研究,A / B测试,分析,调查。 为了在家庭项目级别测试您的想法,最实惠的是民意调查。


我选择了想起妙招的想法,因为 我自己睡觉,孩子从婴儿床中长出来,也搬到了他的床上。


在调查中,最主要的是正确地提出问题;它不应包含提示或带有偏见。 最好准确而简洁。


不正确:您多久翻转一次床垫?
正确:您要把床垫翻过来吗?
永远不要问被访者是否会使用任何东西:“您会使用让人想起床垫翻倒的应用程序吗?”
在大多数情况下,您会得到错误的肯定回答。


在接受采访的10个人在工作中,有4个人说,他们将床垫翻了个身,不记得下次应该何时做,应该朝哪个方向旋转。 这不是最好的结果,但是40%已经可以了。 我决定去做。


定性研究包括


  • UX测试
    最简单,最经济的方法是在纸上绘制所有屏幕的草图,然后在奇迹应用程序中对它们进行原型制作;或者,如果您有经验,可以在figma中使用这些工具-通过突出显示屏幕的活动区域(按钮)并进行描述,无需编程即可创建应用程序的工作原型。应打开的屏幕。


  • 客户发展
    该方法旨在在开发开始之前确定客户的问题或需求。 它包括编写正确的调查表并进行访谈。
    此方法有助于制定应用程序的相关性。



为了使界面原型化,我将自己局限于在贴纸上绘制屏幕并以惊奇的方式对其进行动画处理。 之后,他要求他的同事在屏幕上跑来跑去,分享他的印象。


想法描述


图片


基于以上研究,我们试图回答以下问题:


  • 该应用程序带来什么好处?
    帮助关心自己健康的人更长久地使用工作床垫。


  • 它解决什么问题?
    提醒您发生政变。
    毫不客气地提醒。
    了解为什么需要转弯。
    确切了解如何翻身,不要弄碎任何东西,不要同时撕裂。
    了解如何选择床垫。
    找出何时需要更换床垫(5-10年)。
    紧急情况下如何清洁床垫(散落,弄脏等)。


  • 在什么情况下使用?
    在商店中,卖方展示了如何上交。
    您想在家中将其翻转。
    在工作中,您需要定期翻转。
    发生紧急情况。


  • 确定将使启动成为可能的最少功能

    最有价值球员


床垫清单,妙招提醒,转移历史记录的授权(床垫的使用寿命比电话长),简要说明。


实作


在这里,我想简单介绍一下所使用的技术。


之所以选择Realm作为数据库,是因为我长期以来对数据库的了解,以及异步写入/读取方法的存在和出色的性能等便捷功能。


异步获取Realm数据
public RealmResults<RealmModelMattress> getAllMattressAsync(){ realm = getRealm(); return realm.where(RealmModelMattress.class) .equalTo("deleted", false) .sort("id", Sort.ASCENDING) .findAllAsync(); } private Realm getRealm() { if (mConfig==null) { mConfig = new RealmConfiguration.Builder() .build(); } realm = mRealm.get(); if (realm == null) { try { realm = Realm.getInstance(mConfig); mRealm.set(realm); } catch (Exception e) { closeConnection(); Realm.deleteRealm(mConfig); realm = Realm.getInstance(mConfig); mRealm.set(realm); } } return realm; } 

另外,更改数据时在recyclerView中显示数据的简便性:只需连接RealmChangeListener即可:


连接RealmChangeListener
  private RealmChangeListener<RealmResults<RealmModelMattress>> realmChangeListener = data->{ refreshData(data); }; 

要删除元素,recyclerView使用了ItemTouchHelper,在此对其用法进行了足够详细的编写。
创建一个扩展ItemTouchHelper.SimpleCallback的类并描述在滑动(onSwiped)或移动(onMove)时应该发生的动作就足够了。
并将其连接到回收站:


将SwipeToDeleteCallback连接到recyclerview
 rv = view.findViewById(R.id.recyclerViewMattress); rv.setLayoutManager(new LinearLayoutManager(context)); adapter = new MattressListAdapter(data, clickListener, getContext()); rv.setAdapter(adapter); ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new SwipeToDeleteCallback(adapter)); itemTouchHelper.attachToRecyclerView(rv); 

由于需要将床垫翻转过来,因此本地通知是通过notificationManager实施的,因为这是目前最正确的方法,也是Google批准的警报创建方法之一。


发送通知
 private void sendNotification(String title, String text, int id) { String DBEventIDTag= "Mattress" + id; int DBEventID = id; Intent intent = new Intent(getApplicationContext(), MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(DBEventIDTag, DBEventID); PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); NotificationManager notificationManager = (NotificationManager)getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel("default", "Default", NotificationManager.IMPORTANCE_DEFAULT); Objects.requireNonNull(notificationManager).createNotificationChannel(channel); } NotificationCompat.Builder notification = new NotificationCompat.Builder(getApplicationContext(), "default") .setContentTitle(title) .setContentText(text) .setContentIntent(pendingIntent) .setSmallIcon(R.mipmap.ic_launcher) .setAutoCancel(true); Objects.requireNonNull(notificationManager).notify(id, notification.build()); } 

应用程序中的授权以两种方式完成:
您可以指定您的邮件并输入密码-相应的帐户将在服务器上创建,并且应用程序中有关床垫和旋转时间的数据将被绑定到该帐户。 这提供了在更换手机后通过登录到应用程序来获取它们的机会。


第二种授权方法:facebook,使用其API。
要实现此方法,首先要做的是在Facebook上注册您的应用程序,在服务器https://graph.facebook.com/me?fields=id&access_token=accToken上实现访问令牌验证,其中id是Facebook用户标识符和accToken临时访问令牌,确认这确实是同一个人发送的授权请求。


发布结果


创建一个开发人员帐户
我们一次性支付$ 25的注册费。
我们发布应用程序翻转床垫
我们确定内容分级,费用和分发(可以使用该应用程序的国家/地区)。 由于该应用程序已针对两种语言进行了本地化,因此我们用俄语和英语进行了2个描述以及屏幕截图。


我希望这对不要误入歧途并实现目标的人有用。

Source: https://habr.com/ru/post/zh-CN472514/


All Articles