加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-phone-7 – Twitter,OAuth,Hammock,TweetSharp和Windows

发布时间:2020-12-14 05:28:28 所属栏目:Windows 来源:网络整理
导读:我一直在努力让OAuth在我的 Windows Phone应用程序中使用Twitter,但我找到的所有信息都已过时或难以理解.我最终找到了一个地方,当我发现这个博客发布 http://samjarawan.blogspot.co.uk/2010/09/building-real-windows-phone-7-twitter_18.html时,它让我一直
我一直在努力让OAuth在我的 Windows Phone应用程序中使用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,它没关系,所以我可以告诉你没有错误.

如果有人可以帮我解决这个问题,那就太好了.我已经看过其他需要用户输入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.1n" + verifyResponse.StatusDescription));
                    }
                });
            }
            else
            {
                Dispatcher.BeginInvoke(() => MessageBox.Show("Failed to connect to Twitter. Please try again.0n" + response.StatusDescription));
            }
        });
    }
}

编辑2:这可能与此有关吗? https://dev.twitter.com/blog/ssl-upgrade-for-twitterapi

解决方法

我解决了!事实证明Twitter正在返回访问令牌Gzipped.使用博客文章中描述的方法,我不得不改变第二个RestClient,如下所示:

var client = new RestClient
{
    Authority = "https://api.twitter.com/oauth",Credentials = credentials,HasElevatedPermissions = true,SilverlightAcceptEncodingHeader = "gzip",DecompressionMethods = DecompressionMethods.GZip
};

现在它有效!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读