1

我正在尝试在我的 WPF 应用程序中实现谷歌融合表 api,以在我的谷歌地图中显示大量标记,但问题是当我要验证函数“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 回答