Wenn ein Benutzer eine Aktion nur einmal am Tag ausführen kann, z. B. eine Freikarte für einen Wettbewerb, gibt es zwei Möglichkeiten, auf die ich meiner Erfahrung nach gestoßen bin.
1) 24 Stunden Reset
Wenn er die Aktion am ersten Tag um 23:45 Uhr ausführt, kann er sie erst am zweiten Tag um 23:45 Uhr oder später erneut ausführen. Er wird es am zweiten Tag um 11:44 Uhr nicht schaffen.
2) Mitternachts-Reset (oder eine festgelegte Zeit)
Unabhängig davon, wann der Benutzer die Aktion an Tag 1 ausführt, kann er sie erneut ausführen, sobald es Mitternacht wird und Tag 2 beginnt.
Beides schränkt den Benutzer ein, nur eine Aktion pro Tag auszuführen, aber ich stoße am häufigsten auf Methode 1, die meiner Meinung nach aus zwei Gründen ziemlich unpraktisch ist:
- Zuerst muss ich auf die Zeit warten
- und zweitens wird über einen langen Zeitraum der Zeitstempel, mit dem ich die Aktion durchführe, immer später, da ich die Aktion nicht jeden Tag genau zu diesem Zeitstempel ausführen kann, nur ein paar Sekunden oder Minuten später.
Gibt es irgendeinen technischen Grund, dass man Methode 1 vorziehen würde, obwohl der meiner Meinung nach wichtige Nachteil für den Benutzer vorher angegeben wurde?
Bearbeiten, um genau zu sein: Ich spreche insbesondere von einem Beispiel, bei dem die tatsächliche Zeitspanne von 24 Stunden offensichtlich nicht benötigt wird, wie im aktuellen Freispiel-Event von Theorie11 , bei dem Sie alle 24 Stunden 1 Freispiel erhalten, um eine Chance zu bekommen bei gewinnenden Preisen.
Antworten:
Ich bin überrascht, wie gewöhnlich würde ich den Mitternachts-Reset erwarten.
Dies hat jedoch den großen Nachteil, dass alle 24 Stunden mehr als eine Mitternacht stattfindet. Sie müssen Ihre Zeitzone auswählen.
Vielleicht ist dies der Grund, warum die universelle einmal pro 24 Stunden gewählt wird. Sie können sich vorstellen, dass das Unternehmen nicht akzeptieren möchte, dass Benutzer in der Hälfte der verschiedenen Länder möglicherweise lokale Endzeiten haben, die nicht Mitternacht betragen und so ändern sie das Marketing zu "pro 24h" und die Software-Spezifikation, um zusammenzupassen
Obwohl ich denke, dass dies heutzutage ziemlich häufig vorkommt, dass "um 14 Uhr GMT endet" oder ähnliches.
Ich hätte gedacht, die Herausforderung, ein letztes Aktionsdatum für jeden Benutzer zu speichern, wäre schwieriger, als Benutzern oder Aktionstypen eine Zeitzone zuzuweisen.
Edit Ich denke, es lohnt sich, die Unterschiede zwischen den beiden Methoden zu beachten
24h Regel
1 pro Kalendertag Regel
1 pro Kalendertag in UTC-Regel
* Das Sammeln von Ereignissen wird für verschiedene Berichtszwecke sehr nützlich sein. z.B. Sagen wir, ich habe 10 Preise, die alle 24 Stunden zu gewinnen sind und die sich mit der Zeit unterscheiden. Wie viele Schüler haben sich an Tag 10 angemeldet? etc
quelle
Aus meinem Kopf:
quelle
Wie in anderen Antworten bereits erwähnt, ist die 24-Stunden-Methode für mehrere Zeitzonen benutzerfreundlicher und ebenso einfach zu codieren, da Sie nur den letzten erfolgreichen Zeitstempel für jeden Benutzer speichern.
Es hat auch den zusätzlichen "Vorteil", dass der Benutzer tatsächlich jeden Tag mit der App interagieren muss, um alle täglichen Aktionen zu erhalten. Wenn beispielsweise Mitternacht zurückgesetzt wird, kann ein Benutzer um 23:59 Uhr und anschließend um 12:00 Uhr eine Aktion ausführen. Sie könnten dies jeden zweiten Tag tun und trotzdem alle Aktionen bekommen. Bei einigen Apps besteht der Zweck der täglichen Aktionen darin, den Benutzer dazu zu bringen, täglich mit der App zu interagieren, sodass dies weniger ideal ist.
Es gibt eine dritte Alternative, die die Fallstricke der Benutzeroberfläche von beiden vermeidet, die jedoch etwas schwieriger zu codieren ist.
3) Keine Streifen von mehr als n Aktionen in (n-0,75) * 24 Stunden
Es sind zwar zwei Variablen zum Speichern erforderlich, aber jemand, der nicht versucht, das System zu missbrauchen, kann jederzeit während des Tages eine Aktion ausführen, ohne sich Gedanken über Zeitzonen und Zurücksetzen machen zu müssen.
Es verhindert auch, dass jemand mehr als eine "zusätzliche" Aktion ausführt.
Implementieren Sie also den Algorithmus, den Sie benötigen, um die Startzeit der Serie, die letzte Spielzeit und die Anzahl der Aktionen in Ihrer Serie zu speichern.
Wenn Sie die letzte Aktionszeit nachverfolgen, können Sie zwei Aktionen ablehnen, die zu nahe beieinander liegen. Sie können diese Grenze jedoch auf weniger als 24 Stunden festlegen, da der Streifen ein früheres Kriechen am Tag verhindert.
Eine Serie hält an, solange Sie jeden Tag aktiv werden. Wenn das Ergreifen einer Aktion bedeuten würde, dass Sie mehr Aktionen als Tage in Ihrer Serie haben, wird sie abgelehnt. Dies verhindert, dass Sie sich langsam vorwärts schleichen und zusätzliche Aktionen ausführen, da sich die Startzeit Ihrer Serie nicht ändert.
Pseudocode zum Ausführen der Prüfung und zum Verfolgen der Zeiten:
Als zusätzlichen Bonus bekommst du einen Streak Counter, falls du einen möchtest.
quelle
In Bezug auf Ihr Problem mit der 24-Stunden-Dauer zwischen Aktionen verwenden einige Unternehmen stattdessen eine 22-Stunden-Dauer. Auf diese Weise erhalten die Benutzer genau zu dem Zeitpunkt Spielraum, an dem die Aktion erforderlich ist, und können die Benutzer dennoch zur tatsächlichen Durchführung der Aktion ermutigen einmal pro Tag - nein 23:59 - 00:00 Schlupfloch.
Keine Antwort, aber ich habe nicht genug Punkte, um sie zu kommentieren.
quelle
Zusätzlich zu den obigen Antworten werden durch das Zurücksetzen um Mitternacht Verkehrsstöße gefördert. Wenn die Aktion zu einem bestimmten Zeitpunkt allen Teilnehmern zur Verfügung steht, besteht für viele ein Anreiz, die Aktion gleichzeitig auszuführen. Dies ist der gleiche Grund, warum in den meisten Bundesstaaten der Führerschein nicht zu einem festgelegten Zeitpunkt (USA), sondern zu Ihrem Geburtstag abläuft: Der DMV könnte nicht mithalten, wenn alle am 1. Januar ihren Führerschein ablaufen ließen.
Nebenbei bemerkt : Wenn ein Computersystem für eine große Anzahl von Benutzern einmal am Tag Maßnahmen ergreifen muss, können Sie dieselbe Frage stellen, und ich entwerfe sie in der Regel als Kombination aus beidem. Sie können sich zwei Cron-Aufgaben vorstellen:
In der Praxis habe ich festgestellt, dass ersteres spröde ist. Wenn eine Cron-Task während der Ausführung unterbrochen wird, wird die Aktion möglicherweise nicht auf eine bestimmte Nummer angewendet, und es kann zusätzliche Arbeit erforderlich sein, damit das System merkt, wo es sich befand, und dort weitermacht, wo es aufgehört hat. Es kann auch zu Problemen führen, wenn Sie genügend Datensätze erhalten, die Ihre Cron-Task nicht alle innerhalb eines angemessenen Zeitlimits verarbeiten kann, und sie wird vor dem Abschluss heruntergefahren.
Letzteres kümmert sich um beide Belange. Es wird nicht angestrebt, dass alles im Abstand von 24 Stunden verarbeitet wird, aber solange Ihre Cron-Aufgabe alle Aktionen jeden Tag problemlos durchlaufen kann, sind sie ziemlich nahe beieinander und Sie garantieren, dass jeder an jedem tatsächlichen Tag ausgeführt wird (d. H Es wird nicht mehr als 24 Stunden dauern, bis die Dinge langsam auseinander driften. Am wichtigsten ist jedoch, dass es leicht dort ankommt, wo es aufgehört hat, wenn die Dinge aus irgendeinem Grund zusammenbrechen.
https://www.youtube.com/watch?v=hoMO1yYC7pQ
quelle
Tägliche Bus- / Bahntickets bei TfL (Transport for London) sind von 4.30 bis 4.30 Uhr gültig. Wechseln Sie, wenn Menschen schlafen. Viele Leute werden einen Service nutzen wollen, etwa von 8:30 bis eine Stunde nach Mitternacht
quelle
Das Zurücksetzen auf Mitternacht hat eine bestimmte Bedingung, die entweder wünschenswert oder schädlich sein kann, je nachdem, welches Problem Sie lösen möchten. Das heißt: Ich kann die Aktion eines Tages um 11:59:58 Uhr und erneut um 00:00:01 Uhr ausführen. Wenn es sich bei dem Problemraum um einen Wettbewerb handelt, kann dies denjenigen einen unfairen Vorteil verschaffen, die ihre Handlungen kurz vor Mitternacht ausführen. Die 24-Stunden-Rücksetzregel ist die einzige Möglichkeit, eine gerechte Verteilung der verfügbaren Aktionen sicherzustellen, unabhängig davon, zu welcher Tageszeit jemand über sie verfügt.
Die Konsequenz eines späteren und späteren 24-Stunden-Resets kann durch Vorsehen einer Toleranz gemindert werden, beispielsweise durch Akzeptieren einer Aktionsanforderung innerhalb von 15 Minuten nach dem Auftreten des Resets, solange die Aktion nicht tatsächlich aufgezeichnet wird (oder nicht ausgeführt wird) Effekt), bis der Reset erfolgt. Dies führt etwas mehr Komplexität in die Lösung ein, aber ich kann mir keine Abhilfemaßnahme vorstellen, um zwei tägliche Aktionen im Sekundenabstand durchführen zu können, wie im Fall des Zurücksetzens um Mitternacht.
quelle
Ich habe noch niemanden erwähnt, dass die 24-Stunden-Regel regelmäßige Besuche fördert. Bei vielen Spielen gibt es eine tägliche Login- / Siegesbelohnung, die nach 24 Stunden zurückgesetzt wird, da Sie lieber alle 24 Stunden für eine kurze Zeit einchecken möchten als alle 48 Stunden doppelt so lange. Ich würde mir vorstellen, dass es bei Websites, die Ticket-Werbegeschenke hosten, ähnlich ist.
quelle