我一直在尝试使用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) => {
...
});
}
}
答案 0 :(得分:2)
我认为您在浏览器控件上缺少IsScriptEnabled属性。将此设置为true以启用Javascript。 http://msdn.microsoft.com/en-us/library/windowsphone/develop/microsoft.phone.controls.webbrowser.isscriptenabled(v=vs.105).aspx
之前我曾经遇到过这个问题,而且非常讨厌。
答案 1 :(得分:1)
我建议使用https://www.nuget.org/packages/DropboxOAuth2Client/(DropBoxOAuth2Client)和https://www.nuget.org/packages/oauth2authorizer/(oAuth2Authorizer)NuGet包。 oAuth2Authorizer对于获取访问令牌很有用。一旦获得访问令牌,就可以使用DropBoxClient,它是任何.NET客户端的REST API的简单包装器。