1

Я работаю над приложением Windows Phone 8, которое использует GoogleApis nugets. У меня проблема с отладкой на эмуляторе (не все члены моей команды имеют доступ к устройству). Следующий код просто висит indefinetely:Windows Phone - Google API отменен [C#]

await Task.Factory.StartNew(() => 
{ 
    try 
    { 
     var result = GoogleWebAuthorizationBroker.AuthorizeAsync(
      new ClientSecrets 
      { 
       ClientId = "<my_client_id>", 
       ClientSecret = "<my_client_secret>" 
      }, 
      new[] {"https://mail.google.com/email"}, 
      "<user_id_to_be_authorized>", 
      token).Result; 
    } 
    catch (Exception ex) 
    { 
     Debug.WriteLine(ex); 
    } 
}); 

И если я изменю .Result к .ContinueWith ((х) => {...}) всегда бросает TaskCanceledException, содержащийся в AggregateException. Код отлично работает на моей Lumia 920. Есть ли что-то, чего я не хватает? Я проверил подключение к Интернету в эмуляторе, и браузер работает, я также сделал некоторые поисковые запросы, но без каких-либо результатов.

ответ

0

Попробуйте это:

private readonly ILogManager _logManager; 
private readonly IStorageService _storageService; 
private UserCredential _credential; 
private Oauth2Service _authService; 
private Userinfoplus _userinfoplus; 

/// <summary> 
/// Initializes a new instance of the <see cref="GoogleService" /> class. 
/// </summary> 
/// <param name="logManager">The log manager.</param> 
/// <param name="storageService">The storage service.</param> 
public GoogleService(ILogManager logManager, IStorageService storageService) 
{ 
    _logManager = logManager; 
    _storageService = storageService; 
} 

/// <summary> 
/// The login async. 
/// </summary> 
/// <returns> 
/// The <see cref="Task"/> object. 
/// </returns> 
public async Task<Session> LoginAsync() 
{ 
Exception exception = null; 
try 
{ 
    // Oauth2Service.Scope.UserinfoEmail 
    _credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets 
    { 
     ClientId = Constants.GoogleClientId, 
     ClientSecret = Constants.GoogleClientSecret 
    }, new[] { Oauth2Service.Scope.UserinfoProfile }, "user", CancellationToken.None); 

    var session = new Session 
    { 
     AccessToken = _credential.Token.AccessToken, 
     Provider = Constants.GoogleProvider, 
     ExpireDate = 
      _credential.Token.ExpiresInSeconds != null 
       ? new DateTime(_credential.Token.ExpiresInSeconds.Value) 
       : DateTime.Now.AddYears(1), 
     Id = string.Empty 
    }; 

    return session; 
} 
catch (TaskCanceledException taskCanceledException) 
{ 
    throw new InvalidOperationException("Login canceled.", taskCanceledException); 
} 
catch (Exception ex) 
{ 
    exception = ex; 
} 
await _logManager.LogAsync(exception); 
return null; 
} 
/// <summary> 
/// Gets the user information. 
/// </summary> 
/// <returns> 
/// The user info. 
/// </returns> 
public async Task<Userinfoplus> GetUserInfo() 
{ 
    _authService = new Oauth2Service(new BaseClientService.Initializer() 
    { 
     HttpClientInitializer = _credential, 
     ApplicationName = AppResources.ApplicationTitle, 
    }); 
    _userinfoplus = await _authService.Userinfo.V2.Me.Get().ExecuteAsync(); 

    return _userinfoplus; 
} 
+0

Редактирование в мой оригинальный пост был удален, поэтому я объясню здесь: Я нашел причину проблемы - на 8.0 WP эмуляторы я не мог заставить его работать , но установка 8.1 WP SDK с новыми эмуляторами решила проблему (на 8.1 эмулятор работает отлично) –