Как настроить еженедельные повторные уведомления pu sh в Unity (C#, в настоящее время нацеленный на iOS)? - PullRequest
4 голосов
/ 28 января 2020

Я сейчас нахожусь в процессе настройки уведомлений pu sh для нашего приложения, написанного на Unity (C#). Код в проекте ниже.

(В итоге: я получаю текущее время пользователя, в которое он вошел в систему, и назначаю его в качестве времени уведомления pu sh для соответствующего дня недели. Если в других случаях время равно нулю) дни недели (0-6), я назначаю это время и этим, в противном случае они остаются одни, поскольку в этом случае им ранее было назначено подходящее время для дня.)

Теперь, Я установил триггер уведомлений для дня, часа и минуты следующего уведомления и установил для «Repeats» значение true. В документации говорится, что уведомление будет повторяться каждый «определенный период времени» - поэтому я предполагаю, например, если я установил День на 6 февраля, а часы и минуты на 12: 34p, то это будет повторяться каждый 6 февраля в 12: 34p.

Я хотел бы, чтобы уведомления повторялись еженедельно. Это было просто в Xcode, потому что вы могли установить «День недели», а не заданный c день, как здесь. Есть ли какое-нибудь решение сделать повторение уведомления по дням недели?

private void IOSNotificationManager()
{
    // determine whether user has already allowed or disallowed notifications--won't run again if user has already made decision
    StartCoroutine(RequestAuthorization());

    // Schedule daily notification for user based on time of play
    // iOS uses local time, while Android uses UTC
    DateTime userTime = DateTime.Now;

    // Set a reminder for this specific day of the week (0 = Sunday, 6 = Saturday).
    // Note that this will overwrite any previous time set for this day.
    GameData.PushNotificationTimes[(int)userTime.DayOfWeek] = userTime;

    // Schedule the week of push notifications for days that haven't already been scheduled
    for (var i = 0; i < 7; i++)
    {
        if (GameData.PushNotificationTimes[i] == null)
        {
            // get the number of days after which the notification should occur
            int daysToNotification = (i - (int)userTime.DayOfWeek + 7) % 7;
            DateTime nextDay = userTime.AddDays(daysToNotification);

            GameData.PushNotificationTimes[i] = nextDay;
        }

        Debug.Log("The push notification time scheduled for day " + i + " is " + GameData.PushNotificationTimes[i]);
    }

    for (var i = 0; i < 7; i++)
    {
        DateTime pushNotificationTime = GameData.PushNotificationTimes[i];

        var calendarTrigger = new iOSNotificationCalendarTrigger()
        {
            Day = pushNotificationTime.Day,
            Hour = pushNotificationTime.Hour,
            Minute = pushNotificationTime.Minute,
            // Indicate whether the notification is repeated every defined time period.
            // For instance if hour and minute fields are set the notification will be triggered every day at the specified hour and minute.
            Repeats = true
        };
    }
}

1 Ответ

3 голосов
/ 01 февраля 2020

Хорошо, после прочтения некоторых документов я думаю, что нашел то, что вы хотите. Вместо iOSNotificationCalendarTrigger() вы можете использовать iOSNotificationTimeIntervalTrigger(). Это позволяет вам передавать C# TimeSpan. Затем вы можете просто установить на 7 дней.

В прошлый раз, когда я проверял, что все равно должно работать круглый год;)

Вариант Календаря специально предназначен для отправки этого уведомления каждые x дней, или каждые x часов "из-за того, что это не позволяет дни, или, может быть, вы могли бы затратить 7 * 24 часа там, я действительно не вижу использования этого варианта слишком много. С другой стороны, я видел странные вещи внутри вещей Unity.

Дайте мне знать, если это сработает для вас!

...