如何以编程方式在android中实现奖励系统?
我计划在我的android应用程序中实现一个奖励系统,该应用程序的用户每天打开应用程序可以获得100分。用户在一天内只能获得100分,无论他们打开应用程序的次数是多少。我不知道如何才能做到这一点,例如,一个名为WhatChat的应用程序,为用户每天打开应用程序提供积分: 我正在尝试实现一个类似的系统,但是每天只给用户100分。我知道我需要跟踪当天,可能需要使用如何以编程方式在android中实现奖励系统?,android,datetime,sharedpreferences,reward-system,Android,Datetime,Sharedpreferences,Reward System,我计划在我的android应用程序中实现一个奖励系统,该应用程序的用户每天打开应用程序可以获得100分。用户在一天内只能获得100分,无论他们打开应用程序的次数是多少。我不知道如何才能做到这一点,例如,一个名为WhatChat的应用程序,为用户每天打开应用程序提供积分: 我正在尝试实现一个类似的系统,但是每天只给用户100分。我知道我需要跟踪当天,可能需要使用SharedReferences将其存储在本地存储器中,并记录每天的日期,然后将记录点数的变量增加100 在伪代码中,它看起来像这样:
SharedReferences
将其存储在本地存储器中,并记录每天的日期,然后将记录点数的变量增加100
在伪代码中,它看起来像这样:
Set CreditsGained to 0
IF app launched for the first time on Current date THEN
CreditsGained = CreditsGained + 100
Else
Do nothing
如何在我的应用程序中实现这样的系统?您可以在服务器上实现。他们每天第一次提出网络请求时,加上100分。无法在客户端安全地执行此操作。您可以在服务器上执行此操作。他们每天第一次提出网络请求时,加上100分。客户端无法安全地执行此操作。我建议您不要使用
共享首选项来保存所需的数据。因为他们可以修改它
只有一种方法可以保护它,你必须有自己的服务器来保存它。本地存储也不安全
但是,如果你想知道如何检查,为了学习,你也可以使用共享首选项
步骤1:在字符串中获取当前时间:
SimpleDateFormat sdf = new SimpleDateFormat("d-m-Y");
Calendar cal = Calendar.getInstance();
String dateInStr = sdf.format(cal.getTime());
步骤2:启动时检查活动。
在onCreate()之后
好的,把第一步代码放在第二步代码上面,我只是把它分开以便理解
第三步:之后你可以检查他们是否有超过1次的检查点。如果这是他们一天中第一次退房,我们就给他们加100分
将其放在else语句中,位于edit.putBoolean(dateInStr,true)之上代码>
我建议您不要使用共享首选项
来保存所需的数据。因为他们可以修改它
只有一种方法可以保护它,你必须有自己的服务器来保存它。本地存储也不安全
但是,如果你想知道如何检查,为了学习,你也可以使用共享首选项
步骤1:在字符串中获取当前时间:
SimpleDateFormat sdf = new SimpleDateFormat("d-m-Y");
Calendar cal = Calendar.getInstance();
String dateInStr = sdf.format(cal.getTime());
步骤2:启动时检查活动。
在onCreate()之后
好的,把第一步代码放在第二步代码上面,我只是把它分开以便理解
第三步:之后你可以检查他们是否有超过1次的检查点。如果这是他们一天中第一次退房,我们就给他们加100分
将其放在else语句中,位于edit.putBoolean(dateInStr,true)之上代码>
我可能会晚些回答你的问题..但对于其他寻求奖励系统的和不希望服务器处理这些东西-->
你可以
检查中是否启用了自动日期和时间选项
用户的设备
**。然后根据回复,你可以给用户奖励
例如
我希望它能帮助你!向上投票,祝你好运:)我可能会晚些回答你的问题。但是对于其他寻求奖励系统的人,和不希望服务器处理这些事情-->
你可以
检查中是否启用了自动日期和时间选项
用户的设备
**。然后根据回复,你可以给用户奖励
例如
我希望它能帮助你!向上投票并祝您好运:)每当用户打开应用程序时,请检查本地存储中是否有可用的最后信用日期,如果有,请验证当前日期比存储的日期多一个,然后在第二天向用户信用
如果存储中没有日期,则可以假定这是第一天。是的,您可以在这个用例的MainActivity中这样做,因为您不会进行任何耗时的api调用
我只是分享了这个想法,找出代码。这很简单。每当用户打开应用程序时,请检查本地存储中是否有可用的最后信用日期,如果有,请验证当前日期比存储的日期多一个,然后您为第二天的用户信用
如果存储中没有日期,则可以假定这是第一天。是的,您可以在这个用例的MainActivity中这样做,因为您不会进行任何耗时的api调用
我只是分享了这个想法,找出代码。这很简单。我正在制作一个原型,目前我没有服务器。因此,基本上我想使用本地存储来实现这个系统,用于测试/用户测试。@SumOne检查我的解决方案Hi,步骤1中的代码,我应该将其粘贴到mainactivity中吗?此外,这是否每天只给用户一次积分,不管他们是否多次打开应用程序?请你帮助我了解应用程序中应该包含的内容,如果if语句为false,那么if语句将做什么,例如,我如何向现有应用程序添加100个学分?我正在制作一个原型,目前我没有服务器。因此,基本上我想使用本地存储来实现这个系统,用于测试/用户测试。@SumOne检查我的解决方案Hi,步骤1中的代码,我应该将其粘贴到mainactivity中吗?此外,这是否每天只给用户一次积分,不管他们是否多次打开应用程序?请你帮助我了解应用程序中应该包含的内容,如果if语句为false,那么if语句将做什么,例如,我如何向现有应用程序添加100个学分?我正在制作一个原型,目前我没有服务器。因此,基本上我想使用本地存储来实现这个系统,用于测试/用户测试目的。如果你没有真正做到这一点,你就不必做出正确的选择。写一份能给你带来快乐的工作
//get prev_score from SP
long previous_score = pre.getLong("score", 0);
//add 100
previous_score = previous_score + 100;
//save back to SP
edit.putLong("score", previous_score);
calendar= Calendar.getInstance();
year=calendar.get(Calendar.YEAR);
month=calendar.get(Calendar.MONTH);
day=calendar.get(Calendar.DAY_OF_MONTH);
todaystring= year+ "" + month + "" + day + "";
timepref=context.getSharedPreferences("REWARD",0);
currentday=timepref.getBoolean(todaystring,false);
//Daily reward
if (!currentday && isZoneAutomatic(context) && isTimeAutomatic(context)) { //currentday =false
btnrwrd.setEnabled(true);
btnrwrd.setText("Collect your daily reward!");
btnrwrd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, "Daily reward granted!", Toast.LENGTH_SHORT).show();
// Do your stuff here
// saving the date
SharedPreferences sharedPreferences = context.getSharedPreferences("SAVING", Context.MODE_PRIVATE);
SharedPreferences.Editor edt = sharedPreferences.edit();
edt.putInt("mypoints", Integer.valueOf(points.getText().toString()));
edt.apply();
Toast.makeText(context, String.valueOf(daily), Toast.LENGTH_SHORT).show();
SharedPreferences.Editor timedaily = timepref.edit();
timedaily.putBoolean(todaystring, true);
timedaily.apply();
btnrwrd.setText("Wait for 24 hrs");
btnrwrd.setEnabled(false);
}
});
}
else {
Toast.makeText(context, "Your daily reward is over!", Toast.LENGTH_SHORT).show();
}
public static boolean isTimeAutomatic(Context c) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.Global.getInt(c.getContentResolver(), Settings.Global.AUTO_TIME, 0) == 1;
} else {
return android.provider.Settings.System.getInt(c.getContentResolver(), android.provider.Settings.System.AUTO_TIME, 0) == 1;
}
}
public static boolean isZoneAutomatic(Context c) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
return Settings.Global.getInt(c.getContentResolver(), Settings.Global.AUTO_TIME_ZONE, 0) == 1;
} else {
return android.provider.Settings.System.getInt(c.getContentResolver(), android.provider.Settings.System.AUTO_TIME, 0) == 1;
}
}