我正在开发一个Xamarin Forms应用程序,它集成了Facebook并使用Xamarin.Auth包登录 . 但每次浏览器窗口打开以登录Facebook或Twitter .
Xamarin是否支持使用Facebook和Twitter进行原生登录?也就是说,我可以使用用户设备上的Facebook或Twitter应用程序登录吗?
我需要获得用户的Facebook和Twitter ID .
您可以使用ACAccountStore,如果用户没有社交框架,您也可以使用xamarin auth
ACAccountStore accountStore = new ACAccountStore(); ACAccountType accountType = accountStore.FindAccountType(ACAccountType.Facebook); AccountStoreOptions fbAccountStoreOptions = new AccountStoreOptions(); fbAccountStoreOptions.FacebookAppId = "333333"; fbAccountStoreOptions.SetPermissions(ACFacebookAudience.Everyone, new[] { "email", "user_birthday", "user_about_me","public_profile" }); Tuple<bool, NSError> requestResult = await accountStore.RequestAccessAsync(accountType, fbAccountStoreOptions); if (requestResult.Item1) { ACAccount[] availableAccounts = accountStore.Accounts.Where(acco => acco.AccountType.Description == "Facebook").ToArray(); int fbAccountsCount = availableAccounts.Count(); if (fbAccountsCount < 1) { HandleFacebookAuthorizationUsingOAuthDialog(); } else if (fbAccountsCount == 1) { HandleFacebookAuthorizationUsingACAccount(availableAccounts.First()); }} private void HandleFacebookAuthorizationUsingOAuthDialog() { try { OAuth2Authenticator fbAuthenticator = new OAuth2Authenticator(SharedConstants.FacebookLiveClientId, "email,user_birthday,user_about_me", new Uri("https://m.facebook.com/dialog/oauth/"), new Uri("http://www.facebook.com/connect/login_success.html")); fbAuthenticator.AllowCancel = true; fbAuthenticator.Completed += FbAuthenticator_Completed; fbAuthenticator.Error += FbAuthenticator_Error; ; RootView.PresentViewController(fbAuthenticator.GetUI(), true, null); } catch (Exception ex) { } } private async void HandleFacebookAuthorizationUsingACAccount(ACAccount account) { try { NSMutableDictionary<NSString, NSString> params_ = new NSMutableDictionary<NSString, NSString>(); params_.SetValueForKey(new NSString("id,name,birthday,gender"), new NSString("fields")); SLRequest request = SLRequest.Create(SLServiceKind.Facebook, SLRequestMethod.Get, new NSUrl($"https://graph.facebook.com/me"), params_); request.Account = account ?? throw new ArgumentNullException(nameof(account)); SLRequestResult response = await request.PerformRequestAsync(); NSHttpUrlResponse responseData = response.Arg2; if (responseData.StatusCode == 200) { string jsonResponse = response.Arg1.ToString(); FacebookAuthorizationResult authResult = ParseFacebookAuthorizationResultFromJsonResponse(jsonResponse); _facebookAuthTCS?.TrySetResult(new SocailAutheticationResult<FacebookAuthorizationResult>(authResult)); } else { _facebookAuthTCS?.TrySetResult(new SocailAutheticationResult<FacebookAuthorizationResult>(SocialAuthorizationState.CouldntConnectToService)); } } catch (Exception ex) { _ } }
1 回答
您可以使用ACAccountStore,如果用户没有社交框架,您也可以使用xamarin auth