0

我使用 Twitter4J 连接到 Twitter。我通过为 WebView 设置 WebViewClient 来防止通过默认浏览器加载。问题是 Twitter 没有返回我的活动。重定向后在 WebView 上显示“网页不可用”。

打电话

        final RequestToken requestToken = twitter.getOAuthRequestToken(Constant.CALLBACK_URL);
        twitterSite.loadUrl(requestToken.getAuthenticationURL());

onNewIntent & WebViewClient

@Override
protected void onNewIntent(final Intent intent) {
    super.onNewIntent(intent);
    setResult(RESULT_OK);
    finish();
}

private class CustomWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(final WebView view, final String url) {         
        if(url.startsWith("http")) {
            view.loadUrl(url);
            return true;
        }

        return false;
    }

显现

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    >
    <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity
        android:name=".TwitterLoginActivity"
        android:label="@string/title_activity_main" 
        android:launchMode="singleInstance">
        <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="test123"/>
        </intent-filter>
    </activity>
</application>

CALLBACK_URL

public static final String CALLBACK_URL = "test123:///";
4

2 回答 2

1

你的代码很好。只需要进行如下更改

 private class CustomWebViewClient extends WebViewClient 
     {
        @Override
        public boolean shouldOverrideUrlLoading(final WebView view, final String url)     
        {         
            if(url.startsWith(Constant.CALLBACK_URL))
            {
              //set visibility  GONE/INVISIBLE for webview.
            }
            else if(url.startsWith("http")) 
            {
                view.loadUrl(url);
                return true;
            }

            return false;
        }
于 2012-08-02T06:51:03.427 回答
0

我认为你应该这样使用:1),

public static final String CALLBACK_URL = "test123://TwitterLoginActivity";

2),

<activity
        android:name=".TwitterLoginActivity"
        android:label="@string/title_activity_main" 
        android:launchMode="singleInstance">
        <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="test123"  android:host="TwitterLoginActivity"/>
        </intent-filter>
    </activity>

请测试一下。祝你好运!

于 2012-08-02T06:26:09.217 回答