2

彼らは次のように書いています:「サポートされているプラ​​ットフォーム: ポータブル クラス ライブラリ」。しかし、このコードをポータブル クラスで書くと、エラーが発生します。

public async void MyFuncrion()
{
            UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                //new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read),
                new ClientSecrets
                {
                    ClientId = "", //"PUT_CLIENT_ID_HERE",
                    ClientSecret = "" //"PUT_CLIENT_SECRETS_HERE"
                },
                new[] { TasksService.Scope.Tasks },
                "user",
                CancellationToken.None);

            var service = new TasksService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = "Tasks API Sample",
            });

            TaskLists results = await service.Tasklists.List().ExecuteAsync();

            foreach (var tasklist in results.Items)
            {
                TasklistTitlesCollection.Add(tasklist.Title + " " + tasklist.Updated);
                // You can get data from the file (using file.Title for example)
                // and append it to a TextBox, List, etc.
            }
}

エラー: " UserCredential credential = await GoogleWebAuthorizationBroker.AuthorizeAsync()"、彼はポータブル ライブラリで動作しません。ライブラリを使用してタスクを取得するにはどうすればよいですかGoogleWebAuthorizationBroker. 私はすでにアクセストークンを自分で取得TasksServiceしており、コンストラクターでアクセストークンなどを渡すことができますTasksServiceか?

参考文献

4

2 に答える 2

1

この記事を使用して、この壁を破りますgoogle .net ライブラリ

ここでは、PCL と windows8 からの私のコードをいくつか過去のものにします。

PCL: DataStore を提供する必要があります

private async Task<GoogleAuthorizationCodeFlow.Initializer> InitInitializer()
{
    _iDataStore = await _userCredential.GetDataStore(); //new StorageDataStore()
    var initializer = new GoogleAuthorizationCodeFlow.Initializer
    {
        ClientSecrets = new ClientSecrets
        {
            ClientId = ClientId, //"PUT_CLIENT_ID_HERE",
            ClientSecret = ClientSecret, //"PUT_CLIENT_SECRET_HERE"
        },
        Scopes = new[] { TasksService.Scope.Tasks },
        DataStore = (Google.Apis.Util.Store.IDataStore)_iDataStore //new StorageDataStore()
    };
    return initializer;
}

それで

public async Task<TasksService> Prepare()
{
    GoogleAuthorizationCodeFlow.Initializer initializer = await InitInitializer();

    Object credential = new Object();

    if (String.IsNullOrEmpty(_username))
    {
        return null;
    }

    TasksService service = null;
    try
    {
        credential = await _userCredential.GetCredential(initializer, _username);
    }
    catch (Google.Apis.Auth.OAuth2.Responses.TokenResponseException e)
    {
        service = null;
        return service;
    }
    catch
    {
        return null;
    }
    service = new TasksService(new BaseClientService.Initializer
    {
        HttpClientInitializer = (UserCredential)credential,
        ApplicationName = _applicationName,
    });
    return service;
} 

1) Windows ストアでは、StorageDataStore を提供し、それを pcl にトラバースする必要があります。2) 使用

AuthorizationCodeWinRTInstalledApp(initializer).AuthorizeAsync(username, new CancellationToken(false))

Google ライブラリ (Google.Apis.Auth.OAuth2) から資格情報を取得し、それを pcl にトラバースします。

于 2014-09-11T22:15:20.180 に答える