IsraelHikingMap / Site

Israel Hiking Map has maps, route planning, and travel information for Israel. This repository holds the files needed for running the Israel Hiking Map site and apps.
https://israelhiking.osm.org.il/
Other
77 stars 31 forks source link

Encourage subscribers to update their offline maps #1896

Open zstadler opened 1 year ago

zstadler commented 1 year ago

What is the problem this feature will solve?

Some subscribers do not update their offline maps for long periods.

Some of subscribers may not be aware of the fact that the maps are updated on a daily basis. Such subscribers would be less likely to renew their subscription. Some of them may be under the false impression that they bought a copy of the offline maps that has no expiration date.

What is the feature you are proposing to solve the problem?

This is a rough sketch of things we can do to increase the awareness of updated offline maps

If the offline maps are more than 2 weeks old, the application will show something like:

Your offline maps copy is more than two weeks old. Do you want to download an updated version? OK Cancel

[X] Please remind me again in two weeks

If the user clicks OK the offline maps will be updated immediately.

The Please remind me... checkbox is selected by default. Regardless if the user chooses OK or Cancel, if the Please remind me checkbox is cleared, no further reminders will be issued.

What alternatives have you considered or tried?

Another option is to automatically download the offline files once in every two weeks. Currently, the offline map file is 211Mb, so downloading it twice a month is not a huge issue, even if it is done on cellular data.

Alternatively, the automatic download can be triggered only if on Wi-Fi. However, AFAIK, this information is not currently available in the app.

Additional information

This is a result of a support conversation with an advanced, long-time user who was still unaware of the need to manually update the offline maps.

github-actions[bot] commented 11 months ago

This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 7 days

HarelM commented 11 months ago

To summarize the phone conversation: The main motivation behind this feature is to let the user feel good about the fact the he bought a subscription by letting him know that the offline maps are constantly updating and that there's a value in downloading the latest version.

Two weeks is the minimal time, it might be better to have more time so that not every time the user opens the app this popup will be shown. I was thinking more in the direction of 2 month, maybe 1 month is the right middle ground.

I was thinking about using existing dialogs to reduce maintenance and complexity, but it might not be the right approach here since we are talking about marketing kind of feature, and deciding to use a degraded UX when it comes to marketing might not be the right approach.

I'll look into it as part of the coming version.

Relevant code - to some extent:

        if (offlineState.isOfflineAvailable === true &&
            offlineState.lastModifiedDate !== null &&
            userState.userInfo != null &&
            new Date().getTime() - new Date(offlineState.lastModifiedDate).getTime() > 30 * 24 * 60 * 60 * 1000 &&
            new Date().getTime() - new Date(offlineState.lastOfflineMapsDownloadReminderDate || 0).getTime() > 2 * 30 * 24 * 60 * 60 * 1000
            ) {
            // In case the user has downloaded the maps more than a months ago and had a notification about it more than two month ago.
            this.store.dispatch(new SetLastOfflineMapsDownloadReminderDateAction(new Date()));
            this.toastService.confirm({
                type: "Custom",
                message: "Do you want to download the maps?", // HM TODO: reousrces!!!
                customConfirmText: "Sure!",
                customDeclineText: this.resources.dontShowThisMessageAgain,
                confirmAction: () => {
                    this.downloadOfflineMaps(false);
                },
                declineAction: () => {
                    const nowPlusTwoYears = new Date();
                    nowPlusTwoYears.setFullYear(nowPlusTwoYears.getFullYear() + 2);
                    this.store.dispatch(new SetLastOfflineMapsDownloadReminderDateAction(nowPlusTwoYears));
                }
            })
            return;
        }