diff --git a/src/App/Constants.cs b/src/App/Constants.cs index 98876f2da..c23d7750b 100644 --- a/src/App/Constants.cs +++ b/src/App/Constants.cs @@ -6,5 +6,8 @@ public const string SettingPinUnlockOn = "pinUnlockOn"; public const string SettingLockSeconds = "lockSeconds"; public const string SettingLastBackgroundedDate = "lastBackgroundedDate"; + + + public const string PushPromptShown = "initialPushPromptShown"; } } diff --git a/src/App/Pages/VaultListSitesPage.cs b/src/App/Pages/VaultListSitesPage.cs index 1a46b3dcd..e23aa6970 100644 --- a/src/App/Pages/VaultListSitesPage.cs +++ b/src/App/Pages/VaultListSitesPage.cs @@ -10,6 +10,8 @@ using Bit.App.Resources; using Xamarin.Forms; using XLabs.Ioc; using Bit.App.Utilities; +using PushNotification.Plugin.Abstractions; +using Plugin.Settings.Abstractions; namespace Bit.App.Pages { @@ -19,6 +21,8 @@ namespace Bit.App.Pages private readonly ISiteService _siteService; private readonly IUserDialogs _userDialogs; private readonly IClipboardService _clipboardService; + private readonly IPushNotification _pushNotification; + private readonly ISettings _settings; private readonly bool _favorites; public VaultListSitesPage(bool favorites) @@ -28,6 +32,8 @@ namespace Bit.App.Pages _siteService = Resolver.Resolve(); _userDialogs = Resolver.Resolve(); _clipboardService = Resolver.Resolve(); + _pushNotification = Resolver.Resolve(); + _settings = Resolver.Resolve(); Init(); } @@ -59,10 +65,21 @@ namespace Bit.App.Pages Content = listView; } - protected override void OnAppearing() + protected async override void OnAppearing() { base.OnAppearing(); LoadFoldersAsync().Wait(); + + if(Device.OS == TargetPlatform.iOS && !_favorites) + { + if(!_settings.GetValueOrDefault(Constants.PushPromptShown)) + { + _settings.AddOrUpdateValue(Constants.PushPromptShown, true); + await _userDialogs.AlertAsync("bitwarden keeps your vault automatically synced by using push notifications. For the best possible experience, please select \"Ok\" on the following prompt when asked to enable push notifications.", "Enable Automatic Syncing", "Ok, got it!"); + } + + _pushNotification.Register(); + } } private async Task LoadFoldersAsync() diff --git a/src/App/Services/PushNotificationListener.cs b/src/App/Services/PushNotificationListener.cs index 0a00da481..529cb293b 100644 --- a/src/App/Services/PushNotificationListener.cs +++ b/src/App/Services/PushNotificationListener.cs @@ -33,7 +33,7 @@ namespace Bit.App.Services Debug.WriteLine("Message Arrived: {0}", JsonConvert.SerializeObject(values)); } - public void OnRegistered(string token, DeviceType deviceType) + public async void OnRegistered(string token, DeviceType deviceType) { Debug.WriteLine(string.Format("Push Notification - Device Registered - Token : {0}", token)); @@ -42,8 +42,7 @@ namespace Bit.App.Services return; } - var response = _deviceApiRepository.PutTokenAsync(_appIdService.AppId, new Models.Api.DeviceTokenRequest(token)) - .GetAwaiter().GetResult(); + var response = await _deviceApiRepository.PutTokenAsync(_appIdService.AppId, new Models.Api.DeviceTokenRequest(token)); if(response.Succeeded) { Debug.WriteLine("Registered device with server.");