通过Android';s AccountManager类

通过Android';s AccountManager类,android,twitter,twitter-oauth,accountmanager,Android,Twitter,Twitter Oauth,Accountmanager,我正在开发一个基于twitter的应用程序,并试图整合Android内置的twitter帐户支持。下面的代码用于弹出我的应用程序访问twitter的确认对话框,但我不确定作为authenticationType传入什么。任何帮助都将不胜感激。我在谷歌上搜索了所有的地方,似乎都找不到正确的答案。它代替下面的“oauth” AccountManager am=AccountManager.get(这个); 账户[]账户=am.getAccountsByType(TWITTER账户类型); 如果(科目

我正在开发一个基于twitter的应用程序,并试图整合Android内置的twitter帐户支持。下面的代码用于弹出我的应用程序访问twitter的确认对话框,但我不确定作为authenticationType传入什么。任何帮助都将不胜感激。我在谷歌上搜索了所有的地方,似乎都找不到正确的答案。它代替下面的“oauth”

AccountManager am=AccountManager.get(这个);
账户[]账户=am.getAccountsByType(TWITTER账户类型);
如果(科目长度>0){
科目科目=科目[0];
getAuthToken(acct,“oauth”/*此处的内容*/,null,this,new accountmanager callback()){
@凌驾
公共作废运行(AccountManagerFuture arg0){
试一试{
Bundle b=arg0.getResult();
Log.e(“TrendDroid”,“THIS AUTHTOKEN:”+b.getString(AccountManager.KEY\u AUTHTOKEN));
}捕获(例外e){
Log.e(“TrendDroid”EXCEPTION@AUTHTOKEN");  
}  
}},空);
}

如果您想要OAuth,您应该使用以下选项:

  • com.twitter.android.oauth.token
  • com.twitter.android.oauth.token.secret
如果需要用户的密码,则可以编写自己的验证器。官方Twitter应用程序不存储密码。密码仅用于获取这两个令牌一次。

来自:

某些身份验证程序具有身份验证令牌类型,其值为 验证器依赖。一些服务 使用不同的令牌类型来访问 不同的功能--用于 例如,Google使用不同的身份验证 访问Gmail和Google的代币 同一帐户的日历


我认为,这不是很重要。你真的应该问问twitter验证器的开发者。或者写你自己的。

很好的问题:-)你能提供TWITTER账户类型的值,以便答案是完整的吗?com.TWITTER.android.auth.logindodes Facebook在android上有这种类型的oauth吗?在我们公司,他们在我们的应用程序中使用FBI对话框。但用户怎么能相信这是一个facebook对话框而不是一些愚蠢的pishing呢?这些令牌是否可以根据api和应用程序进行身份验证?我试图使用它,我收到一个401错误。当我尝试使令牌无效并尝试接收另一个令牌时,它不起作用。有什么想法/线索吗?Thanks@PedroFraca,在我的测试中,Android的AccountManager推特令牌仅与推特的官方消费者密钥和机密(在那里…)结合使用。如果不使用Twitter的凭据,您必须使用WebView授权流,并让用户在您的应用程序中输入生成的pin。我在这里有一个完全开源的解决方案:
AccountManager am = AccountManager.get(this);
Account[] accts = am.getAccountsByType(TWITTER_ACCOUNT_TYPE);
if(accts.length > 0) {
    Account acct = accts[0];
    am.getAuthToken(acct, "oauth"/*what goes here*/, null, this, new AccountManagerCallback<Bundle>() {

    @Override
    public void run(AccountManagerFuture<Bundle> arg0) {
        try {
                     Bundle b = arg0.getResult();  
                     Log.e("TrendDroid", "THIS AUTHTOKEN: " + b.getString(AccountManager.KEY_AUTHTOKEN));  
                } catch (Exception e) {  
                     Log.e("TrendDroid", "EXCEPTION@AUTHTOKEN");  
                }  
    }}, null);
}