1

WPF アプリケーションに Google fustion テーブル API を実装して、Google マップに多数のマーカーを表示しようとしていますが、関数「GetAuthorization」を認証しようとすると問題が発生します。

    public Fusion()
    {
        // Create the service.
        objService = new FusiontablesService(new BaseClientService.Initializer()
        {
            Authenticator = CreateAuthenticator()
        });

        //GetAuthorization(provider);
    }

    /// <summary>
    /// The remote service on which all the requests are executed.
    /// </summary>
    public FusiontablesService objService { get; private set; }
    NativeApplicationClient provider = null;

    private IAuthenticator CreateAuthenticator()
    {
        provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
        {
            ClientIdentifier = ClientCredentials.ClientID,
            ClientSecret = ClientCredentials.ClientSecret
        };
        return new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
    }

    private IAuthorizationState GetAuthorization(NativeApplicationClient client)
    {
        // You should use a more secure way of storing the key here as
        // .NET applications can be disassembled using a reflection tool.
        const string STORAGE = "google.samples.dotnet.fusion";
        const string KEY = "AIzaSyCtaH=6+";
        string scope = FusiontablesService.Scopes.Fusiontables.GetStringValue();

        // Check if there is a cached refresh token available.
        IAuthorizationState state = AuthorizationMgr.GetCachedRefreshToken(STORAGE, KEY);
        if (state != null)
        {
            try
            {
                client.RefreshToken(state);
                return state; // Yes  - we are done.
            }
            catch (DotNetOpenAuth.Messaging.ProtocolException ex)
            {
                CommandLine.WriteError("Using existing refresh token failed: " + ex.Message);
            }
        }

        // Retrieve the authorization from the user.
        state = AuthorizationMgr.RequestNativeAuthorization(client, scope);
        AuthorizationMgr.SetCachedRefreshToken(STORAGE, KEY, state);
        return state;
    }

この問題から私を助けてください。

PS このコードは、TaskService と BookService を使用しているときに正常に動作します。

4

1 に答える 1

1

編集:メソッドが IAuthenticator インターフェイスで公開されていないことを忘れていました

private IAuthenticator CreateAuthenticator()
{
    provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
    {
        ClientIdentifier = ClientCredentials.ClientID,
        ClientSecret = ClientCredentials.ClientSecret
    };
    var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
    auth.LoadAccessToken()
    return auth;
}
于 2013-09-12T10:10:30.970 に答える