Esempio n. 1
0
        public Task <NXLoginResult> LoginWithAccountKit(NXLoginType type, NXResponseType responseType)
        {
            InitAK(responseType == NXResponseType.AccessToken
                                   ? AKFResponseType.AccessToken
                                   : AKFResponseType.AuthorizationCode, true);

            loginTaskCompletionSource?.TrySetCanceled();
            loginTaskCompletionSource  = new TaskCompletionSource <NXLoginResult>();
            pendingLoginViewController = type == NXLoginType.Phone
                                                                                                                        ? accountKit.GetViewControllerForPhoneLogin()
                                                                                                                        : accountKit.GetViewControllerForEmailLogin();

            var loginViewController = (pendingLoginViewController as IAKFViewController);

            if (loginViewController != null)
            {
                loginViewController.Delegate             = this;
                loginViewController.EnableSendToFacebook = true;

                loginViewController.Theme = theme;
            }

            NSOperationQueue.MainQueue.BeginInvokeOnMainThread(() =>
            {
                var vcInContext = GetTopMostController();

                vcInContext.PresentViewController(pendingLoginViewController, true, null);
            });

            return(loginTaskCompletionSource.Task);
        }
        public Task <NXLoginResult> LoginWithAccountKit(NXLoginType loginType, NXResponseType responseType)
        {
            var taskCompletionSource = new TaskCompletionSource <NXLoginResult>();

            Action <IAKAccountKitLoginResult> onAKResult = (e) =>
            {
                if (e == null)
                {
                    taskCompletionSource.SetResult(new NXLoginResult(false));
                }
                else
                {
                    var tokenOrCode = responseType == NXResponseType.AccessToken
                                                                                                                                        ? e.AccessToken?.Token
                                                                                                                                        : e.AuthorizationCode;
                    var result = new NXLoginResult(true, false, tokenOrCode);
                    taskCompletionSource.SetResult(result);
                }

                HiddenAccountKitActivity.Completed = null;
            };

            HiddenAccountKitActivity.Completed = onAKResult;

            var context = activityInContext?.Invoke();
            var intent  = new Intent(context, typeof(HiddenAccountKitActivity));

            intent.PutExtra(nameof(NXResponseType), (int)responseType);
            intent.PutExtra(nameof(NXLoginType), (int)loginType);

            context?.StartActivity(intent);

            return(taskCompletionSource.Task);
        }