Twitter授权浏览器无法返回到我的android应用程序

Twitter授权浏览器无法返回到我的android应用程序,android,callback,twitter-oauth,onresume,Android,Callback,Twitter Oauth,Onresume,我正在尝试为我的Android应用程序找出Twitter OAuth。我的问题是,当Twitter OAuth浏览器打开时,我单击“授权应用程序”按钮,但它指向我的回调URL,在那里暂停,不返回到我的应用程序,随后没有调用任何一个onNewIntent/onResume方法(我尝试使用这两个方法,但都没有被调用)。下面是我的活动代码和清单XML文件。非常感谢您的帮助或提示。多谢各位 public class TwitterLoginActivity extends SherlockPrefere

我正在尝试为我的Android应用程序找出Twitter OAuth。我的问题是,当Twitter OAuth浏览器打开时,我单击“授权应用程序”按钮,但它指向我的回调URL,在那里暂停,不返回到我的应用程序,随后没有调用任何一个
onNewIntent
/
onResume
方法(我尝试使用这两个方法,但都没有被调用)。下面是我的活动代码和清单XML文件。非常感谢您的帮助或提示。多谢各位

public class TwitterLoginActivity extends SherlockPreferenceActivity {

private static final String TAG = "TwitterDemo";

private static String CONSUMER_KEY = ""; // filled with my consumer key
private static String CONSUMER_SECRET = ""; //filled with my consumer secret
private static final String CALLBACK_SCHEME = "http";
private String CALLBACK_URL= CALLBACK_SCHEME+"://mjelajahprd.appspot.com/twitter/index";

private OAuthSignpostClient oauthClient;
private OAuthConsumer mConsumer;
private OAuthProvider mProvider;
private Twitter twitter;
private SharedPreferences prefs;
private String authUrl;
private WebView view;
private Boolean status;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        mConsumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY,
                CONSUMER_SECRET);

        mProvider = new DefaultOAuthProvider(
                "http://api.twitter.com/oauth/request_token",
                "http://api.twitter.com/oauth/access_token",
                "http://api.twitter.com/oauth/authorize");

        prefs = PreferenceManager.getDefaultSharedPreferences(this);
        String token = prefs.getString("token", null);
        String tokenSecret = prefs.getString("tokenSecret", null);

        if (token != null && tokenSecret != null) {
            mConsumer.setTokenWithSecret(token, tokenSecret);
            oauthClient = new OAuthSignpostClient(CONSUMER_KEY,
                    CONSUMER_SECRET, token, tokenSecret);
        } else {
            Log.d(TAG, "onCreate. Not Authenticated Yet ");
            new OauthAuthorizedTask().execute();


        }

    } catch (Exception e) {
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
    }
}

private class OauthAuthorizedTask extends AsyncTask<Void, Void, String> {

    @Override
    protected String doInBackground(Void... params) {
        //String authUrl;
        String message = null;
        Log.d(TAG, "OAuthAuthorizeTask mConsumer: " + mConsumer);
        Log.d(TAG, "OAuthAuthorizeTask mProvider: " + mProvider);
        try {
            authUrl = mProvider.retrieveRequestToken(mConsumer,
                    CALLBACK_URL);
            Intent oauthIntent = new Intent(Intent.ACTION_VIEW,
                    Uri.parse(authUrl));
            oauthIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
            oauthIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
            oauthIntent.addFlags(Intent.FLAG_FROM_BACKGROUND);
            startActivity(oauthIntent);


        } catch (OAuthMessageSignerException e) {
            message = "OAuthMessageSignerException";
            e.printStackTrace();
        } catch (OAuthNotAuthorizedException e) {
            message = "OAuthNotAuthorizedException";
            e.printStackTrace();
        } catch (OAuthExpectationFailedException e) {
            message = "OAuthExpectationFailedException";
            e.printStackTrace();
        } catch (OAuthCommunicationException e) {
            message = "OAuthCommunicationException";
            e.printStackTrace();
        }
        return message;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (result != null) {
            Toast.makeText(TwitterLoginActivity.this, result,
                    Toast.LENGTH_LONG).show();
        }
    }
}


@Override
public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.d(TAG, "intent: " + intent);

    // Check if this is a callback from OAuth
    Uri uri = intent.getData();
    if (uri != null && uri.getScheme().equals(CALLBACK_SCHEME)) {
        Log.d(TAG, "callback: " + uri.getPath());

        String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
        Log.d(TAG, "verifier: " + verifier);
        Log.d(TAG, " xxxxxxxxxxx mConsumer access token: " + mConsumer.getToken());
        Log.d(TAG, " xxxxxxxxxxxx mConsumer access token secret: " + mConsumer.getTokenSecret());
        Log.d(TAG, " xxxxxxxxxxxxx OAuth.OAUTH_TOKEN: " + OAuth.OAUTH_TOKEN);
        Log.d(TAG, " xxxxxxxxxxxxx OAuth.OAUTH_TOKEN_SECRET: " + OAuth.OAUTH_TOKEN_SECRET);

        new RetrieveAccessTokenTask().execute(verifier);
    }
}


class RetrieveAccessTokenTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        String message = null;
        String oauthVerifier = params[0];
        try {
            // Get the token
            Log.d(TAG, " RetrieveAccessTokenTask mConsumer: " + mConsumer);
            Log.d(TAG, " RetrieveAccessTokenTask mProvider: " + mProvider);
            Log.d(TAG, " RetrieveAccessTokenTask verifier: " + oauthVerifier);
            mProvider.retrieveAccessToken(mConsumer, oauthVerifier);
            String token = mConsumer.getToken();
            String tokenSecret = mConsumer.getTokenSecret();
            mConsumer.setTokenWithSecret(token, tokenSecret);

            Log.d(TAG, String.format(
                    "verifier: %s, token: %s, tokenSecret: %s", oauthVerifier,
                    token, tokenSecret));

            // Store token in prefs
            prefs.edit().putString("token", token)
                    .putString("tokenSecret", tokenSecret).commit();

            // Make a Twitter object
            oauthClient = new OAuthSignpostClient(CONSUMER_KEY,
                    CONSUMER_SECRET, token, tokenSecret);
            twitter = new Twitter(null, oauthClient);

            Intent mainIntent = new Intent(TwitterLoginActivity.this, MainActivity.class);
            startActivity(mainIntent);

            Log.d(TAG, "token: " + token);
        } catch (OAuthMessageSignerException e) {
            message = "OAuthMessageSignerException";
            e.printStackTrace();
        } catch (OAuthNotAuthorizedException e) {
            message = "OAuthNotAuthorizedException";
            e.printStackTrace();
        } catch (OAuthExpectationFailedException e) {
            message = "OAuthExpectationFailedException";
            e.printStackTrace();
        } catch (OAuthCommunicationException e) {
            message = "OAuthCommunicationException";
            e.printStackTrace();
        }
        return message;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (result != null) {
            Toast.makeText(TwitterLoginActivity.this, result,
                    Toast.LENGTH_LONG).show();
        }
    }
}
公共类TwitterLoginActivity扩展了SherlockPreferenceActivity{
私有静态最终字符串TAG=“TwitterDemo”;
私有静态字符串CONSUMER_KEY=“;//已填充我的CONSUMER KEY
私有静态字符串CONSUMER_SECRET=“;//已填充我的CONSUMER SECRET
私有静态最终字符串回调\u SCHEME=“http”;
私有字符串CALLBACK_URL=CALLBACK_SCHEME+“://mjelajahprd.appspot.com/twitter/index”;
专用OAuthSignpostClient oauthClient;
私人消费者;
私有OAuthProvider;
私人推特;
私人共享参考优先权;
私有字符串authUrl;
私有网络视图;
私有布尔状态;
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
试一试{
mConsumer=新的CommonHttpOAuthConsumer(CONSUMER_键,
消费者(保密),;
mProvider=新的DefaultOAuthProvider(
"http://api.twitter.com/oauth/request_token",
"http://api.twitter.com/oauth/access_token",
"http://api.twitter.com/oauth/authorize");
prefs=PreferenceManager.getDefaultSharedPreferences(此);
String token=prefs.getString(“token”,null);
String tokenSecret=prefs.getString(“tokenSecret”,null);
if(token!=null&&tokenSecret!=null){
mConsumer.setTokenWithSecret(token,tokenSecret);
oauthClient=新的OAuthSignpostClient(消费者密钥,
消费者(U机密、令牌、令牌机密);
}否则{
Log.d(标记“onCreate.notauthenticated”);
新的OauthAuthorizedTask().execute();
}
}捕获(例外e){
Toast.makeText(this,e.getMessage(),Toast.LENGTH_LONG.show();
}
}
私有类OauthAuthorizedTask扩展了AsyncTask{
@凌驾
受保护字符串doInBackground(无效…参数){
//字符串authUrl;
字符串消息=null;
Log.d(标签“OAuthAuthorizeTask mConsumer:+mConsumer”);
Log.d(标签“OAuthAuthorizeTask mProvider:+mProvider”);
试一试{
authUrl=mProvider.RetrieverRequestToken(mConsumer,
回调(URL);
意图OAuthinent=新意图(Intent.ACTION\u视图,
parse(authUrl));
OAuthinent.addFlags(意图、标志、活动、单个、顶部);
OAuthinent.addFlags(Intent.FLAG\u ACTIVITY\u NO\u HISTORY);
OAuthinent.addFlags(Intent.FLAG\u来自\u背景);
星触觉(oauthIntent);
}捕获(OAuthMessageSignerException e){
message=“OAuthMessageSignerException”;
e、 printStackTrace();
}捕获(OAuthNotAuthorizedException e){
message=“OAuthNotAuthorizedException”;
e、 printStackTrace();
}捕获(OAutheExpectationFailedException e){
message=“OAutheExpectationFailedException”;
e、 printStackTrace();
}catch(OAuthCommunicationException e){
message=“OAuthCommunicationException”;
e、 printStackTrace();
}
返回消息;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
如果(结果!=null){
Toast.makeText(TwitterLoginActivity.this,result,
Toast.LENGTH_LONG).show();
}
}
}
@凌驾
公共帐篷(意向){
super.onNewIntent(意向);
日志d(标签“意图:”+意图);
//检查这是否是来自OAuth的回调
Uri=intent.getData();
if(uri!=null&&uri.getScheme().equals(CALLBACK\u SCHEME)){
Log.d(标记,“回调:+uri.getPath());
字符串验证器=uri.getQueryParameter(OAuth.OAuth\u验证器);
Log.d(标签“验证者:”+验证者);
Log.d(标记“xxxxxxxxxx mConsumer访问令牌:”+mConsumer.getToken());
Log.d(标记“xxxxxxxxxxx mConsumer访问令牌密码:”+mConsumer.getTokenSecret());
Log.d(标记“XXXXXXXXXXXX OAuth.OAuth_令牌:”+OAuth.OAuth_令牌);
Log.d(标签“XXXXXXXXXXXX OAuth.OAuth\u令牌\u秘密:”+OAuth.OAuth\u令牌\u秘密);
新建RetrieveAccessTokenTask().execute(验证器);
}
}
类RetrieveAccessTokenTask扩展了AsyncTask{
@凌驾
受保护的字符串doInBackground(字符串…参数){
字符串消息=null;
字符串oauthVerifier=params[0];
试一试{
//拿到代币
Log.d(标签,“RetrieveAccessTokenTask mConsumer:+mConsumer”);
Log.d(标记“RetrieveAccessTokenTask mProvider:+mProvider”);
Log.d(标签,“RetrieveAccessTokenTaskVerifier:”+oauthVerifier);
mProvider.retrieveAccessToken(mConsumer、oauthVerifier);
字符串标记=mConsumer.getToken();
字符串tokenSecret=mConsumer.getTokenSecret();
mConsumer.setTokenWithSecret(token,tokenSecret);
Log.d(标记,String.format(
“验证器:%s,令牌:%s,令牌机密:%s”,oauthVerifier,
代币,代币),;
//在prefs中存储令牌
prefs.edit().putString(“令牌”,令牌)
.putString(“tokenSecret”,tokenSecret).commit();
//创建一个Twitter对象
oauthClient=新的OAuthSignpostClient(消费者密钥,
消费者(U机密、令牌、令牌机密);
twitter=ne
    <activity
        android:name=".TwitterLoginActivity"
        android:label="@string/twitter"
        android:launchMode="singleTask" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:host="mjelajah-prd.appspot.com/twitter/index"
                android:scheme="http" >
            </data>
        </intent-filter>
    </activity>
private final String CALLBACKURL = "sosInternational:///Test";

<intent-filter>  
    <action android:name="android.intent.action.VIEW"></action>  
    <category android:name="android.intent.category.DEFAULT"></category>  
    <category android:name="android.intent.category.BROWSABLE"></category>  
    <data android:scheme="sosInternational" android:host="TwitterLoginActivity"></data>  
</intent-filter>