При реализации получения токена через Vk sdk xamarin выкидывает исключение 'Exception has been thrown by the target of an invocation.'

Все делал по этой статье https://itnan.ru/post.php?c=1&p=332970

Вызываю:

DependencyService.Get<IVkService>().Login();

После этого всплывает исключение 'Exception has been thrown by the target of an invocation.' Отладка дальше не проходит. Ошибка не гуглится, ноль понимания за что можно зацепиться что бы исправить. Буду очень признателен хотя бы намеку на причину. Заранее спасибо!

Путь кода далее:

public interface IVkService
    {
        Task<LoginResult> Login();
        void Logout();
    }

От него наследуется

[assembly: Dependency(typeof(AndroidOAuthService))]
namespace PLAYERSUKA.Droid
{
    public class AndroidVkService: Java.Lang.Object, IVkService
    {
        public static AndroidVkService Instance => DependencyService.Get<IVkService>() as AndroidVkService;

        TaskCompletionSource<LoginResult> _completionSource;
        LoginResult _loginResult;

        public Task<LoginResult> Login()
        {
            _completionSource = new TaskCompletionSource<LoginResult>();
            VKSdk.Login(Forms.Context as Activity, "notifications");
            return _completionSource.Task;
        }
        public void Logout()
        {
            _loginResult = null;
            _completionSource = null;
            VKSdk.Logout();
        }

        public void SetUserToken(VKAccessToken token)
        {
            _loginResult = new LoginResult
            {
                Token = token.AccessToken,
                UserId = token.UserId,
                ExpireAt = FromMsDateTime(token.ExpiresIn)
            };
        }
        void SetResult(LoginResult result)
        {
            _completionSource?.TrySetResult(result);
            _loginResult = null;
            _completionSource = null;
        }
        public void SetErrorResult(string errorMessage)
        {
            SetResult(new LoginResult { LoginState = LoginState.Failed, ErrorString = errorMessage });
        }

        public void SetCanceledResult()
        {
            SetResult(new LoginResult { LoginState = LoginState.Canceled });
        }

        public static DateTimeOffset FromMsDateTime(long? longTimeMillis)
        {
            var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
            return longTimeMillis != null ? epoch.AddMilliseconds(longTimeMillis.Value) : DateTimeOffset.MinValue;
        }
    }
}

Ответы (0 шт):