5

Android Twitter oAuth Connectチュートリアルのコードを試していましたが、正常に機能しました。Twitter認証ページをWebブラウザーではなくWebViewで実行するように変更しようとしましたが、WebViewはoauth://twittersample、アプリケーションへのリンクであるこの形式のURLをロードできなかったようです。承認が成功すると、Webビューが閉じて、アプリに正常に戻るはずです。

「oauth:// twittersample?oauth_token = ....のウェブページが一時的にダウンしているか、新しいウェブアドレスに恒久的に移動した可能性があります」というエラーがあります。私は何をすべきか?

これは、onCreateにあるWebViewのスニペットです。

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;
    }
    }); 

これは私のTwitterjavaクラスTWITTERCONNECTCLASSへのリンクです そしてこれは私のマニフェストです

<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が添付されています

ここに画像の説明を入力してください

4

3 に答える 3

5

私はついにそれを機能させる。以前は、アクセストークンを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と@NikolayElenkovに、私を助けてくれてありがとう。:)

于 2012-12-04T02:28:19.040 に答える
1

同様のHTTPURLを使用しますhttp://localhost/twittersample/oauth_callback

于 2012-12-03T01:51:54.993 に答える
0

私もこの問題を抱えていましたが、コールバックURLがマニフェストファイルのフィルターエントリと一致しないことに気付きました。あなたも同じ問題を抱えているのかもしれません。

次の手順でこれを解決できます。

クラスのコールバックURLを次のように設定します

oauth://twittersample

そしてあなたのAndroidManifestで

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

それを試してみてください..、。

コールバックのURLを確認してください

XXX://YYY 

との一致

<data android:scheme="XXX" android:host="YYY"/>

編集................................................. ................................。

これも試してみてください..、。

于 2012-12-02T13:18:58.627 に答える