twitter update(分享)失败

【twitter update 失败】
2015/01/05
耗时3小时
【描述】
1、修改完登录直接切换后(免输入pin码),share分享(update)就一直失败
403:The request is understood, but it has been refused. An accompanying error message will explain why. 
This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
message - Your credentials do not allow access to this resource
code - 220
最初按提示内容链接地址上看,是发送次数受限了。暂时放一下,第二天再看
2、第二天还是同样的问题,对比Demo(http://javatechig.com/android/how-to-integrate-twitter-in-android-application)却没有问题,再次google
twitter官网的解释是:
https://dev.twitter.com/oauth/application-only
Bearer token used on endpoint which doesn’t support application-only auth
Requesting an endpoint which requires a user context (such as statuses/home_timeline) with a bearer token will produce:
即是使用了app only的授权方式,而不是app user授权方式
在网上没有找到解决问题的办法,只能边对比Demo边查找问题
3、将Demo的key、secret修改为自己的配置,share成功。表明twitter上配置没有问题
4、资料一直提到assect token,则尝试将两者token打印出来对比下。嗯在shared_pref配置文件(/data/data/com.a.b/shared_pref/xx.xml)有记录,直接打开比较就可以了
5、【问题出现了】游戏的shared_pref配置文件上什么内容都没有!!!也就是说一直拿着"",""当token使用导致的问题,晕。。。。
String token = CldComm.sharedPrefs().getString(PREF_KEY_OAUTH_TOKEN, "");
String secret = CldComm.sharedPrefs().getString(PREF_KEY_OAUTH_SECRET, "");

AccessToken a = new AccessToken(token,secret);
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
twitter.setOAuthAccessToken(a);
6、应该是保存token时出现了问题吧
原代码:
    public static SharedPreferences sharedPrefs() {
    return PreferenceManager.getDefaultSharedPreferences(sCldComm.mActivity);
    }
    public static Editor sharedPrefsEditor() {
    return sharedPrefs().edit(); 
    }
CldComm.sharedPrefsEditor().putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
CldComm.sharedPrefsEditor().putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret());
CldComm.sharedPrefsEditor().putBoolean(PREF_KEY_TWITTER_LOGIN, true);
CldComm.sharedPrefsEditor().commit(); 
Demo对应代码:
/* Storing oAuth tokens to shared preferences */
Editor e = mSharedPreferences.edit();
e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
e.putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret());
e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
e.putString(PREF_USER_NAME, username);
e.commit();
存在这样这个可能,每次sharedPrefsEditor获得的都是一个新对象(跟C的指针不同),导致修改的内容没有提交。修改测试下
测试代码:
CldComm.sharedPrefsEditor().putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken()).commit();
CldComm.sharedPrefsEditor().putString(PREF_KEY_OAUTH_SECRET, accessToken.getTokenSecret()).commit();
CldComm.sharedPrefsEditor().putBoolean(PREF_KEY_TWITTER_LOGIN, true).commit();
CldComm.sharedPrefsEditor().commit(); 
测试OK,xml中出现了token内容,同时分享成功了
【总结】
1、对SharedPreferences的用法、java和C的区别需要深入了解一下
2、twitter上返回的内容太误导人了,定位过程中需要有多种手段去发现问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值