gpt4 book ai didi

android - Twitter4j API 不会在 android 中按下后退按钮时重定向到应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:02 24 4
gpt4 key购买 nike

我在 android 中使用 Twitter4j API,当我从 Twitter 浏览器屏幕按下后退按钮以取消授权时,它会将我带回到 PrepareRequestTokenActivity(由 twitter4j api 提供的 Activity )的 onResume(),我正在从 onResume 完成此 Activity ,但是当授权成功时,它也会转到 onResume() 然后转到同一 Activity 的 onNewIntent() 方法,但是 Activity 从恢复完成并且身份验证失败。有没有办法从 Twitter 浏览器屏幕上捕获后退按钮?下面是 Activity 。

public class PrepareRequestTokenActivity extends Activity {



public static final String CONSUMER_KEY = "Hr8aDOFeDdY9UbvQB0w2w";
public static final String CONSUMER_SECRET= "wfZOJYkYVEYrmdmltOaKfRdnUfSiUkr2MQdjRUY2xU";

public static final String REQUEST_URL = "http://twitter.com/oauth/request_token"; //"https://api.twitter.com/oauth/request_token"
public static final String ACCESS_URL = "http://twitter.com/oauth/authorize"; //"https://api.twitter.com/oauth/authorize"
public static final String AUTHORIZE_URL = "http://twitter.com/oauth/access_token"; //"https://api.twitter.com/oauth/access_token"

final public static String OAUTH_CALLBACK_SCHEME = "droidnotify-oauth-twitter";
final public static String OAUTH_CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://callback";

private boolean _debug = false;
private OAuthConsumer _consumer;
private OAuthProvider _provider;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_debug = Log.getDebug();
if (_debug) Log.v("PrepareRequestTokenActivity.onCreate()");
try {
_consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
//_provider = new CommonsHttpOAuthProvider(REQUEST_URL, ACCESS_URL, AUTHORIZE_URL);
_provider = new DefaultOAuthProvider(REQUEST_URL, ACCESS_URL, AUTHORIZE_URL);
} catch (Exception ex) {
if (_debug) Log.e("PrepareRequestTokenActivity.onCreate() Error creating consumer / provider: " + ex.toString());
}
if (_debug) Log.v("PrepareRequestTokenActivity.onCreate() Starting task to retrieve request token.");
new OAuthRequestTokenTask(this, _consumer, _provider).execute();
}


@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if (_debug) Log.v("PrepareRequestTokenActivity.onNewIntent()");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
final Uri uri = intent.getData();
if (uri != null && uri.getScheme().equals(OAUTH_CALLBACK_SCHEME)) {
if (_debug) Log.v("PrepareRequestTokenActivity.onNewIntent() Callback received : " + uri);
if (_debug) Log.v("PrepareRequestTokenActivity.onNewIntent() Retrieving Access Token");
new RetrieveAccessTokenTask(this, _consumer, _provider, prefs).execute(uri);
finish();
}
}


public class RetrieveAccessTokenTask extends AsyncTask<Uri, Void, Void> {

private Context _context;
private OAuthProvider _provider;
private OAuthConsumer _consumer;
private SharedPreferences _prefs;


public RetrieveAccessTokenTask(Context context, OAuthConsumer consumer,OAuthProvider provider, SharedPreferences prefs) {
_context = context;
_consumer = consumer;
_provider = provider;
_prefs=prefs;
}


@Override
protected Void doInBackground(Uri...params) {
final Uri uri = params[0];
final String oauth_verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
try {
_provider.retrieveAccessToken(_consumer, oauth_verifier);
final Editor edit = _prefs.edit();
edit.putString(OAuth.OAUTH_TOKEN, _consumer.getToken());
edit.putString(OAuth.OAUTH_TOKEN_SECRET, _consumer.getTokenSecret());
edit.commit();
String token = _prefs.getString(OAuth.OAUTH_TOKEN, "");
String secret = _prefs.getString(OAuth.OAUTH_TOKEN_SECRET, "");
_consumer.setTokenWithSecret(token, secret);
//_context.startActivity(new Intent(_context, AndroidTwitterSample.class));
//executeAfterAccessTokenRetrieval();
Toast.makeText(_context, "Twitter Authentication Successfull", Toast.LENGTH_LONG);
Toast.makeText(_context, "OAuth.OAUTH_TOKEN KEY: " + OAuth.OAUTH_TOKEN + ", OAuth.OAUTH_TOKEN Value: " + _consumer.getToken(), Toast.LENGTH_LONG);
Toast.makeText(_context, "OAuth.OAUTH_TOKEN_SECRET KEY: " + OAuth.OAUTH_TOKEN_SECRET + ", OAuth.OAUTH_TOKEN_SECRET Value: " + _consumer.getTokenSecret(), Toast.LENGTH_LONG);
if (_debug) Log.v("OAuth - Access Token Retrieved");

} catch (Exception ex) {
if (_debug) Log.e("OAuth - Access Token Retrieval Error: " + ex.toString());
}
return null;
}


}

}

最佳答案

只需在 PrepareRequestTokenActivity 的 onNewIntent() 函数中使用一个 bool 标志初始化为 false 使其为 true 并在 onResume 函数中添加一个 if 条件,如果此标志为 false 则完成 Activity ,如果为 true 则不执行任何操作,即当您单击浏览器中的后退按钮,它会直接转到 onResume,此时您的标志将为 false,然后此 Activity 将完成,当成功或不,谢谢时,它将首先转到 onNewIntent() 然后 onResume,所以 true 那么 Activity 将不会完成

关于android - Twitter4j API 不会在 android 中按下后退按钮时重定向到应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com