public async Task<AuthenticationResult> AuthenticateAsync(AuthNProviderType providerType, IAuthNProviderSettings providerSettings) { // try without sending AMS Application key for now _mobileSvcsClient = new MobileServiceClient(providerSettings.UrlToAuthenticationProvider); // default to MS account if whatever passed in is a no go // TODO: See Azure Mobile GitHub to see how they check for invalid Enum values var azmobProvider = MobileServiceAuthenticationProvider.MicrosoftAccount; // see which Azure Mobile Services Authentication Provider they want to use switch (providerType) { case AuthNProviderType.Google: azmobProvider = MobileServiceAuthenticationProvider.Google; break; case AuthNProviderType.Facebook: azmobProvider = MobileServiceAuthenticationProvider.Facebook; break; case AuthNProviderType.Twitter: azmobProvider = MobileServiceAuthenticationProvider.Twitter; break; case AuthNProviderType.Microsoft: azmobProvider = MobileServiceAuthenticationProvider.MicrosoftAccount; break; default: break; } try { await _mobileSvcsClient.LoginAsync(azmobProvider); // TODO: How do I want to use User Profile Stuff here? // TODO: I will doouble set stff to see how it feels to use each var userProfile = await LoadUserProfile(); var authResult = new AuthenticationResult { ProviderName = _mobileSvcsClient.ToString(), IdentityString = _mobileSvcsClient.CurrentUser.UserId, MobileServicesUserToken = _mobileSvcsClient.CurrentUser.MobileServiceAuthenticationToken }; return authResult; } catch (InvalidOperationException iop) { // TODO: if I try to login to Twitter and click back button on WP8 // TODO: then System.InvalidOperationException is thrown but is NOT caught in Login VM!?? Why? // TODO: Must the try catch be inside here in the platform-specific authprovider? // TODO: Seems like that is the case, so leave it? // TODO: Do something useful //user cancelled so try again //MessageBox.Show("You must login to access the application.", "Please try again", MessageBoxButton.OK); Debug.WriteLine( "AuthenticationProvider:InvalidOpException: You must login to access the application."); } catch (Exception ex) { // TODO: Do something useful //MessageBox.Show("We were not able to log you in, make sure you are connected to the internet and try again.", "Login failed", MessageBoxButton.OK); Debug.WriteLine( "AuthenticationProvider:Exception: not able to log you in, make sure you are connected to the internet."); } finally { Debug.WriteLine("AuthenticationProvider:AuthenticateAsync: finally in try catch...got here!"); } // TODO: how do I want to handle? // if I got here then something bad happened // TODO: Something besides null? return null; }