Twitter无法重定向至Android应用-Twitter4J

3

我希望使用Twitter4J连接到Twitter。在MainActivity中调用TwitterLoginActivity,然后在TwitterLoginActivity中显示一个WebView,并通过OnNewIntent()获取accessToken。问题是,在我“登录”Twitter之后,WebView显示“网页不可用”。这是我的代码。

MainActivity调用TwitterLoginActivity:

                final Intent intent = new Intent(MainActivity.this, TwitterLoginActivity.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                startActivityForResult(intent, Constant.LOGIN_REQUEST);

TwitterLoginActivity显示一个WebView。

    final WebView twitterSite = new WebView(this);
    final ViewGroup viewGroup = (ViewGroup)findViewById(R.id.twitterLoginRoot);
    viewGroup.addView(twitterSite);

    // Open keyboard when focusing on Twitter login form.
    twitterSite.requestFocus(View.FOCUS_DOWN);
    twitterSite.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(final View v, final MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_UP:
                    if (!v.hasFocus()) {
                        v.requestFocus();
                    }
                    break;
            }
            return false;
        }
    });
    twitterSite.setWebViewClient(new CustomWebViewClient());

    try {
        final RequestToken requestToken = twitter.getOAuthRequestToken(Constant.CALLBACK_URL);
        twitterSite.loadUrl(requestToken.getAuthenticationURL());
    } catch (final TwitterException e) {
        e.printStackTrace();
    }

onNewIntent:

@Override
protected void onNewIntent(final Intent intent) {
    super.onNewIntent(intent);
    System.out.println("HIEU=================================");
    setResult(RESULT_OK);
    finish();
}

我使用这个来防止默认浏览器加载。

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

清单文件:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.twitterapitest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <uses-permission
        android:name="android.permission.INTERNET" />

    <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>

</manifest>

回调URI:

public static final String CALLBACK_URL = "test123:///";
2个回答

2

我猜您想要Twitter在您成功登录时返回的“oauth_verifier”,对吗?

您可以从返回shouldOverrideUrlLoading方法的url中获取它。像这样做:

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        progressDialog.show();
    }

    @Override
    public void onPageFinished(WebView view, final String url) {
        progressDialog.dismiss();
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        String oauthVerifier = url.substring(url.indexOf("oauth_verifier=") + 15);
        Intent intent = new Intent(context);
        Bundle bundle = new Bundle();

        bundle.putString("oauth_verifier", oauthVerifier);
        intent.putExtras(bundle);

        ((Activity) ctx).setResult(RESULT_OK, intent);

        return true;
    }                 
});

我有一个类似于你的问题。我不知道如何在WebViewClient中调用onNewIntent,所以我不得不重新思考真正需要什么,最后我意识到我只需要oauth_verifier,并且可以从返回的URL中获取它。

希望这可以帮助你:


0

请使用以下URL作为您的回调URL,它将解决您的问题。

public static final String CALLBACK_URL = "x-oauthflow-twitter://callback";

我已经尝试过了,但它没有起作用。我在我的Java文件和清单文件中都进行了更改尝试。 - Akram
1
请查看此博客,了解如何使用twitter4j库集成Twitter。http://androidcodeexamples.blogspot.in/2011/12/how-to-integrate-twitter-in-android.html - Dipak Keshariya
1
@IGP 如果我使用您的建议在Web浏览器中打开Twitter授权(如果Android上未安装Twitter应用程序),那么它会给我以下错误:“网页不可用。 x-oauthflow-twitter://callback?oauth_token = ......“可能是暂时关闭。” - IgorGanapolsky
@IGP 也许需要在清单文件中指定它作为数据提供程序? - IgorGanapolsky
@IgorG。如果您正在寻找完整的源代码,请从上面的链接下载源代码,它将解决您的问题。 - Dipak Keshariya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接