gpt4 book ai didi

android - WebView 无法加载 oAuth 网址

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:58 25 4
gpt4 key购买 nike

我正在尝试来自 Android Twitter oAuth Connect Tutorial 的代码它成功地工作了。我试图将 Twitter 授权页面更改为在 WebView 而不是 Web 浏览器中运行,但 WebView 似乎无法加载这种格式的 url oauth://twittersample 这是返回到我的链接应用。成功授权后,webview 应该关闭并成功返回到我的应用程序。

有一个错误提示“位于 oauth://twittersample?oauth_token=.... 的网页可能暂时关闭或者它可能已永久移动到新的网址”。我该怎么办?

这是我的 onCreate 中我的 WebView 的 fragment

WebView myWebView = (WebView)findViewById(R.id.myWebView);

myWebView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url)
{
if (url != null && url.startsWith("oauth://twittersample"))
//handleTwitterCallback(url);
{
System.out.println("TWEET TWEET TWEET");
webView.loadUrl(url);
return true;

}

else

return false;
}
});

这是我的 Twitter Java 类的链接 TWITTER CONNECT CLASS这是我的 list

<activity android:name="com.test.settings.ShareSettings" android:label="ShareSettings" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden">       
<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:scheme="oauth" android:host="twittersample"/>
</intent-filter>
</activity>

附件为浏览器运行成功时的logcat

enter image description here

最佳答案

我终于让它工作了。我认为早些时候它不起作用,因为我没有将访问 token 检索到 WebView 中。

在我的 onCreate 下的 WebView 中我做了这个

myWebView = (WebView)findViewById(R.id.myWebView);
myWebView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url)
{ if (url != null && url.startsWith(TWITTER_CALLBACK_URL))

{ System.out.println("TWEET TWEET TWEET");
retrieveAccessToken(url); //added this
webView.setVisibility(View.GONE); //added this
return true;
}

else

return false;

}
});

在我的 retrieveAccessToken(url) 中有这个。

private void retrieveAccessToken(final String url)
{
Uri uri = Uri.parse(url);
String verifier = uri.getQueryParameter(URL_TWITTER_OAUTH_VERIFIER);

try {
// Get the access token
AccessToken accessToken = twitter.getOAuthAccessToken(requestToken, verifier);

// Shared Preferences
Editor e = mSharedPreferences.edit();

// After getting access token, access token secret
// store them in application preferences
e.putString(PREF_KEY_OAUTH_TOKEN, accessToken.getToken());
e.putString(PREF_KEY_OAUTH_SECRET,accessToken.getTokenSecret());
// Store login status - true
e.putBoolean(PREF_KEY_TWITTER_LOGIN, true);
e.commit(); // save changes

Log.e("Twitter OAuth Token", "> " + accessToken.getToken());

TextView twitterConnect = (TextView) findViewById(R.id.twitterConnect);
String disconnect = "Disconnect";
twitterConnect.setText(disconnect);

// Getting user details from twitter
// For now i am getting his name only
long userID = accessToken.getUserId();
User user = twitter.showUser(userID);
String username = user.getName();

txtUpdate.setVisibility(View.VISIBLE);
btnUpdateStatus.setVisibility(View.VISIBLE);

// Displaying in xml ui
//twitterUser.setText(Html.fromHtml("<b>Welcome " + username + "</b>"));
TextView twitterUser = (TextView) findViewById(R.id.twitterDesc);
twitterUser.setText(Html.fromHtml(username));
Toast.makeText(getApplicationContext(), "LOGGED IN AS " + username, Toast.LENGTH_LONG).show();
} catch (Exception e) {
// Check log for login errors
Log.e("Twitter Login Error", "> " + e.getMessage());
}
}

我让它完全按照我想要的方式工作并成功登录。如果我在这里做错了什么,请纠正我。

谢谢@user1690588 和@Nikolay Elenkov,感谢您花时间帮助我。 :)

关于android - WebView 无法加载 oAuth 网址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13668056/

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