私はWindowsPhoneアプリでOAuthをTwitterで動作させるために何日も努力してきましたが、見つけたすべての情報は古くなっているか、追跡するのが困難です。このブログ投稿http://samjarawan.blogspot.co.uk/2010/09/building-real-windows-phone-7-twitter_18.htmlを見つけたとき、私は最終的にどこかに行きました。 、その時点で失敗しました。
私のコードはブログ投稿のコードとほとんど同じですが、コンシューマーキーとコンシューマーシークレットがほとんど変更されています。彼らのアプリでさえも機能しません。Twitterのログイン画面が正常に表示され、正常に認証されますが、RequestAccessToken関数では、この時点で失敗します。
if (String.IsNullOrEmpty(twitteruser.AccessToken) || String.IsNullOrEmpty(twitteruser.AccessTokenSecret))
{
Dispatcher.BeginInvoke(() => MessageBox.Show(response.Content));
return;
}
本当に厄介なのは、メッセージボックスにUnicode置換文字(�)のみが表示され、それ以外は何も表示されないことです。response.StatusCodeも確認しましたが、OKなので、私が知る限りエラーはありません。
誰かがこれを手伝ってくれるなら、それは素晴らしいことです。ユーザーがPINを入力する必要のある他のチュートリアルを見たことがありますが、それらのいずれも機能させることができませんでした。
編集:TweetSharpを機能させようとしましたが、もう一度アクセストークンを取得できません。TweetSharpに使用しているコードは次のとおりです。
public partial class TwitterAuthorisationPage : PhoneApplicationPage
{
private const string consumerKey = "myKey";
private const string consumerSecret = "mySecret"; // These are the correct values for my app
private const string requestTokenUri = "https://api.twitter.com/oauth/request_token";
private const string oAuthVersion = "1.0a";
private const string authorizeUri = "https://api.twitter.com/oauth/authorize";
private const string accessTokenUri = "https://api.twitter.com/oauth/access_token";
private const string callbackUri = "http://bing.com";
private TwitterService twitterService = new TwitterService(consumerKey, consumerSecret);
private OAuthRequestToken _requestToken = null;
public TwitterAuthorisationPage()
{
InitializeComponent();
}
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
base.OnNavigatedTo(e);
twitterService.GetRequestToken((requestToken, response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
_requestToken = requestToken;
Dispatcher.BeginInvoke(() => BrowserControl.Navigate(twitterService.GetAuthorizationUri(requestToken)));
}
else
{
Dispatcher.BeginInvoke(() => MessageBox.Show("Failed to connect to Twitter. Please try again.\n" + response.StatusDescription));
}
});
}
private void ConfirmButton_Click(object sender, RoutedEventArgs e)
{
twitterService.GetAccessToken(_requestToken, PINEntry.Text, (accessToken, response) =>
{
if (response.StatusCode == HttpStatusCode.OK)
{
//These lines just print ?
System.Diagnostics.Debug.WriteLine(accessToken.Token);
System.Diagnostics.Debug.WriteLine(accessToken.TokenSecret);
twitterService.AuthenticateWith(accessToken.Token, accessToken.TokenSecret);
twitterService.VerifyCredentials((user, verifyResponse) =>
{
if (verifyResponse.StatusCode == HttpStatusCode.OK)
{
Dispatcher.BeginInvoke(() => MessageBox.Show(user.Name));
}
else
{
// Fails here
Dispatcher.BeginInvoke(() => MessageBox.Show("Failed to connect to Twitter. Please try again.1\n" + verifyResponse.StatusDescription));
}
});
}
else
{
Dispatcher.BeginInvoke(() => MessageBox.Show("Failed to connect to Twitter. Please try again.0\n" + response.StatusDescription));
}
});
}
}
編集2:それはこれと関係があるのでしょうか?https://dev.twitter.com/blog/ssl-upgrade-for-twitterapi