首页 文章

Xamarin原生登录Facebook和Twitter

提问于
浏览
2

我正在开发一个Xamarin Forms应用程序,它集成了Facebook并使用Xamarin.Auth包登录 . 但每次浏览器窗口打开以登录Facebook或Twitter .

Xamarin是否支持使用Facebook和Twitter进行原生登录?也就是说,我可以使用用户设备上的Facebook或Twitter应用程序登录吗?

我需要获得用户的Facebook和Twitter ID .

1 回答

  • 0

    您可以使用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)
                {
                    _
                }
    
            }
    

相关问题