【问题标题】:DropNet WP 8 integration - Unable to connectDropNet WP 8 集成 - 无法连接
【发布时间】:2013-11-24 21:05:58
【问题描述】:

我一直在尝试使用 DropNet 将我的 Windows Phone 8 应用程序连接到 Dropbox。不幸的是,收效甚微。

根据 DropNet Git 页面上的示例和文档,我尝试了两种不同的方式将应用程序连接到 Dropbox:

第一个是直接在 DropNet Git 页面上呈现的“经典”解决方案。获得 RequestToken 后,使用内部 WebBrowser 控件导航到 Dropbox 登录页面。但是我无法让这个工作。生成令牌和请求 URL 没有问题。但是该页面未在 WebBrowser 控件中正确加载。控件只是闪烁,但不显示任何内容。当我导航到任何其他页面(如谷歌左右)时,该控件正常工作。

第二种解决方案的工作原理几乎相同。而是使用 WebBrowser 控件直接调用 URL,因此使用浏览器应用程序中的构建。这没有问题。登录完成后,用户将使用自定义 URL 方案重定向到应用程序。但是,我不知道在返回应用程序后如何继续。请求结果已包含访问令牌。是否仍然需要使用 GetAccessTokenAsync()?这会报错“找不到参数:oauth_token”?

如何继续使用 Dropbox?

// Step 0. Create the Client
_client = new DropNetClient("API KEY", "API SECRET");

// Step 1. Get Request Token
_client.GetTokenAsync(
    (userLogin) => {
        // Step 2. Authorize App with Dropbox

        // Version 1 - Using a WebBrowser Control
        string url = _client.BuildAuthorizeUrl(AuthRedictURI);
        loginBrowser.LoadCompleted += new System.Windows.Navigation.LoadCompletedEventHandler(loginBrowser_LoadCompleted);
        loginBrowser.Navigate(new Uri(url));

        // OR

        // Version 2 - Calling the URI directly --> Redirect to Browser App --> Use Custom URL Scheme to return to app
        string url = _client.BuildAuthorizeUrl(DropNet.Authenticators.OAuth2AuthorizationFlow.Token, AuthRedictURI);
        WebBrowserTask webbbrowser = new WebBrowserTask();
        webbbrowser.Uri = new Uri(url);
        webbbrowser.Show();
    },
    (error) => {
        //Handle error
    }
);


// Continue Connection Version 1
private void loginBrowser_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) {
    //Check for the callback path here (or just check it against "/1/oauth/authorize")
    if (e.Uri.AbsolutePath == AuthRedictURI) {
        //The User has logged in!
        //Now to convert the Request Token into an Access Token
        _client.GetAccessTokenAsync(
            (response) => {
                ...
            },
            (error) => {
                ...
        });
    } else {
        //Probably the login page loading, ignore
    }
}


// Continue Connection Version 2
// --> Returned to App using custom URL Scheme. The result is contained in
//     the Query string that is parsed into a IDictionary
public void ContinueConnect(IDictionary<string, string> redirectQueryResult) {
    // Possible Response after successful login
    //key: access_token, value: 5915K1yPZ6kAAAAAAAAAAeaA9hsRN4PCF-PVmbgKgZTTfDp3quXeu8zBoTUadu6H
    //key: token_type, value: bearer
    //key: uid, value: 10651049

    if (*Error_Detected = false*) {
        // How to continue here? 
        _client.GetAccessTokenAsync(
            (response) => {
                ...
            },
            (error) => {
                ...
        });
    }
}

【问题讨论】:

    标签: c# windows-phone dropbox-api dropnet


    【解决方案1】:

    我认为您缺少浏览器控件上的 IsScriptEnabled 属性。将此设置为 true 以启用 Javascript。 http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.controls.webbrowser.isscriptenabled(v=vs.105).aspx

    这个问题我也遇到过几次,很烦。

    【讨论】:

    • 非常感谢您的提示!有用。页面已正确加载并显示。但是 Dropbox 登录仍然无法正常工作。现在我到了 _client.GetAccessTokenAsync(...) 但在调用它之后什么也没有发生。不调用响应和错误。没有例外。没什么...相比这个版本2似乎更干净。这里的问题是我不知道如何进行。对此有何建议?
    • 嗯,不太确定。也许尝试附加到 Fiddler(假设您可以在模拟器中运行它?)并查看该调用的响应是什么?
    • 您使用的是哪个版本的 DropNet?来自 NuGet 或 DropNetRT 的 v1.9.x? DropNetRT 使用 async/await 可能会做得更好,因为原始版本基于 RestSharp,它似乎不太喜欢 API。但是 DropNetRT 是基于 HttpClient 的,简单很多。
    • 再次感谢您的及时反馈。我已经使用 NuGet 安装了 DropNet。 NuGet 显示版本 1.9.6。添加到项目中的 DropNet.WindowsPhone 程序集的版本为 1.8.2.0。我使用 NuGet 重新安装了 DropNet,但问题(GetAccessTokenAsync() 没有反馈)仍然相同。我使用 NuGet 安装了 DropNetRT 并遇到了另一个问题:GetAccessToken() return a userLogin with Secrete and Token null。设备和模拟器上的结果是一样的。我为所有的麻烦感到抱歉,但无论我选择哪种方式,它们都最终陷入了死胡同......
    • 你能把你的代码发邮件给我,让我看看吗?您是否附加了提琴手以确保响应从服务器返回?
    【解决方案2】:

    我建议使用 https://www.nuget.org/packages/DropboxOAuth2Client/ (DropBoxOAuth2Client) 和 https://www.nuget.org/packages/oauth2authorizer/ (oAuth2Authorizer) NuGet 包。 oAuth2Authorizer 对于获取访问令牌很有用。一旦获得访问令牌,您就可以使用 DropBoxClient,它是任何 .NET 客户端的 REST API 的简单包装器。

    【讨论】:

      猜你喜欢
      • 2017-01-08
      • 2021-12-02
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-17
      相关资源
      最近更新 更多