如何在 Unity(C#,目前针对 iOS)中设置每周重复推送通知?
Posted
技术标签:
【中文标题】如何在 Unity(C#,目前针对 iOS)中设置每周重复推送通知?【英文标题】:How can I set a weekly repeat push notifications in Unity (C#, currently targeting iOS)? 【发布时间】:2020-05-14 03:42:53 【问题描述】:我目前正在为我们用 Unity (C#) 编写的应用程序设置推送通知。下面草稿中的代码。
(总而言之:我获取用户当前登录时间,并将该时间指定为一周中相应日期的推送通知时间。如果一周中的其他日子有空时间(0 -6),我也将这个时间分配给那些人;否则,他们将被单独留下,因为在这种情况下,他们之前已被分配了一天中的适当时间。)
现在,我为下一个通知的日期、小时和分钟设置了通知触发器,并将“重复”设置为 true。在文档中,它声明通知将在每个“定义的时间段”重复 - 因此我假设,例如,如果我将 Day 设置为 2 月 6 日,将小时和分钟设置为 12:34p,这将在每年 2 月 6 日重复下午 12 点 34 分。
我希望每周重复一次通知。这在 Xcode 中很简单,因为您可以设置“工作日”而不是特定日期,就像这里的情况一样。是否有任何解决方案可以在一周中的某一天重复通知?
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】:好的,在阅读了一些文档后,我想我找到了你想要的。
您可能想要使用 iOSNotificationTimeIntervalTrigger()
而不是 iOSNotificationCalendarTrigger()
。这允许您传入 C# TimeSpan。然后您可以将其设置为 7 天。
上次我检查过它应该全年都可以工作;)
Calendar 变体专门用于“每 x 天或每 x 小时发送一次此通知”,因为它不允许几天,或者你可以在那里推 7*24 小时,我真的看不出有什么用那个变种那么多。然后我又在 Unity 的东西中看到了奇怪的东西。
让我知道这是否适合你!
【讨论】:
问题是我正在按星期几设置特定时间。关于修改上述语法以使用 TimeIntervalTrigger 的想法? @MikePandolfini 我已经查看了反编译的代码。虽然 NotificationTrigger 是一个接口,但如果您要实现它,它实际上并没有做那么多。它似乎不支持特定的偏移量(无论是几天还是几小时)但是您可以做的是使用日历触发器,请记住(在本地保存)weekday+ hours/minutes
。然后编写一个只计划提前 X 天的循环。假设 3 周,不重复。每当用户再次打开应用程序时,您都会检查计划GetScheduledNotifications()
并再次填充 3 周。
我也有同样的想法,但希望有更优雅的东西。会接受你的回答,因为它肯定会起作用,但我真的很怀念 Xcode 版本——重复 .weekday。
我同意它一点也不优雅。但我觉得推送通知总是有点奇怪。或者根据我的经验,他们是。我肯定会尝试团结一致地提出这一点,以得到你所定义的。我不知道什么是最好的投诉渠道。也许是论坛?祝你的应用好运!
为了后人的缘故,对此答案的最后评论。在不深入细节的情况下,在 Android 上以这种方式设置推送通知非常慢,而在 iOS 上则相当慢,所以请注意您选择以这种方式设置的总天数。我发现超过 3 周的通知 (21) 在某些设备上造成了明显的减速,尤其是对于 Android。以上是关于如何在 Unity(C#,目前针对 iOS)中设置每周重复推送通知?的主要内容,如果未能解决你的问题,请参考以下文章
我如何在 unity 2018.1 中设置和使用 proGrids?
Unity,如何在Shader Graph中设置shader标签“DisableBatching”=“True”?
如何在 CustomPropertyDrawer 中设置 SerializedProperty.propertyType