-
Notifications
You must be signed in to change notification settings - Fork 191
User Deferrals
While the user deferrals feature was technically available in v1.0.0 of Nudge, it was only calculated per active Nudge session. (After closing Nudge and re-opening, the deferral count would be reset to 0.)
With v1.1.0 and later, user deferrals are now saved and maintained across the entirety of a Nudge event.
Nudge saves the following keys in ~/Library/Preferences/com.github.macadmins.Nudge.plist
deferRunUntil
requiredMinimumOSVersion
userDeferrals
userQuitDeferrals
userSessionDeferrals
When Nudge first launches, it determines what Nudge event is configured and compares the requiredMinimumOSVersion
key of the JSON / Mobile Configuration against requiredMinimumOSVersion
key in NSUserDefaults
.
If the value in your configuration is higher than the value in NSUserDefaults
the following occurs:
- Log event:
New Nudge event detected - resetting all deferral values
-
deferRunUntil
key is deleted -
userDeferrals
,userQuitDeferrals
anduserSessionDeferrals
are reset to 0
There are two types of user deferrals: Session Deferrals and Quit Deferrals.
-
Session Deferrals are the amount of times Nudge was not the foremost application when the built-in Nudge timer was passed.
- The count is saved to
userSessionDeferrals
- The count is saved to
-
Quit Deferrals are the amount of times Nudge was exited out by the user
- The count is saved to
userQuitDeferrals
- The count is saved to
Session and Quit Deferrals values are combined for all Nudge logic and saved to userDeferrals
There are four buttons available to the user. The text is customizable following the updateElements key structure.
- primaryQuitButton - primaryQuitButtonText
- One Day - oneDayDeferralButtonText
- One Hour - oneHourDeferralButtonText
- Custom - customDeferralButtonText
As the Nudge event gets closer and closer, some of the user deferral buttons will no longer be displayed to the end-user.
- If the the amount of hours from the current date to the
requiredInstallationDate
is greater than0
, the one hour button will appear - If the the amount of hours from the current date to the
requiredInstallationDate
is greater than theimminentWindowTime
, the one day button will appear - If the the amount of hours from the current date to the
requiredInstallationDate
is greater than theapproachingWindowTime
, the custom button will appear
You will see log events showing what is allowed
Device allow1HourDeferralButton: true
Device allow24HourDeferralButton: true
Device allowCustomDeferralButton: false
Clicking on the customDeferralButton
opens a new UI, where the user is presented all available times that they can select. The user is not allowed to select a time in the past, nor select a time that is passed the amount of daysRemaining
minus imminentWindowTime
(converted into days by dividing the value by 24).
Example:
{
"osVersionRequirements": [
{
"requiredInstallationDate": "2021-08-30T00:00:00Z",
"requiredMinimumOSVersion": "11.5.2"
}
],
"userExperience": {
"approachingWindowTime": 72,
"imminentWindowTime": 24
},
}
- If the current date was 2021-08-01T00:00:00Z, all buttons would be selectable and the user could use custom deferral up until 2021-08-28T00:00:00Z
- If the current date was 2021-08-28T00:00:00Z, the one hour and one day buttons would be selectable
- If the current date was 2021-08-29T00:00:00Z, only the one hour button would be selectable
It is very likely that your LaunchAgent timing will no longer occur when utilizing userQuitDeferrals
. For instance, if you have Nudge set to launch every 30 minutes, but a user has deferred for a day, you will lose up to 24 nudge events. If you do not want this behavior, it is recommended to disable user deferrals with the allowUserQuitDeferrals key.
When utilizing the Nudge Logging LaunchDaemon, the log events are always saved with the machine's local time, while Nudge calculates and saves all time via UTC (GMT timezone). This is a cosmetic issue.
If you are an admin and want to reset Nudge's user deferral behavior, simply run the following Terminal command
defaults delete ~/Library/Preferences/com.github.macadmins.Nudge.plist