Android - Twitter: обратный вызов получен, но не отображается - PullRequest
3 голосов
/ 24 января 2011

Я пытаюсь в течение 4 дней выяснить, почему мое приложение не работает так, как я ожидаю.

Мое приложение хочет использовать OAuth с Twitter (работает) и перезваниватьследует ввести метод onNewIntent.Он этого не делает, и я не могу понять, почему.

Поэтому, нажав кнопку твиттера, открывается веб-страница, где я могу ввести свои учетные данные.Затем я получаю экран с сообщением о том, что он прошел успешно и я буду перенаправлен обратно в свое приложение.Я возвращаюсь к своему приложению, но метод onNewIntent никогда не вызывается.Я установил точку останова в начале метода onNewIntend и запустил отладчик.Это не останавливается на этом методе!Он останавливается в других методах, поэтому он не может быть отладчиком.

В моем файле журнала (в комплекте), в третьей строке снизу, вы можете видеть, что он начинает новое намерение.Итак ... что здесь происходит?

Может кто-нибудь объяснить, пожалуйста?Я очень запутался.

Это мой код, который срабатывает при нажатии кнопки twitter:

callBackURL = "myapp://twitactivity";
httpOauthConsumer = new CommonsHttpOAuthConsumer(consKey, consSec);
httpOauthProvider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token","http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize");

String authUrl = httpOauthProvider.retrieveRequestToken(httpOauthConsumer, callBackURL);
startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse(authUrl)));

Это исходный код моего метода onNewIntent:

public void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Log.i("onNewIntent", "Yep success.");
    Uri uri = intent.getData();
    if(uri != null && uri.toString().startsWith(callBackURL)) {
        String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
    etc......

У меня также есть следующее в моем файле манифеста:

<activity android:name=".TwitterScreen">
    <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="myapp" android:host="twitactivity" />
    </intent-filter>
</activity>

И вот что я вижу в моем файле журнала:

01-24 10:23:36.064: INFO/ActivityManager(61): Displayed activity nl.gemoro.android.demo/.TwitterScreen: 6660 ms (total 6660 ms)
01-24 10:23:38.614: INFO/global(348): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
01-24 10:23:44.025: INFO/ActivityManager(61): Starting activity: Intent { act=android.intent.action.VIEW dat=http://twitter.com/oauth/authorize?oauth_token=KjCUNMKg13OClyRjQff94QWKfoRBUpNLE2uF9cJkHA cmp=com.android.browser/.BrowserActivity }
01-24 10:23:44.185: INFO/ActivityManager(61): Start proc com.android.browser for activity com.android.browser/.BrowserActivity: pid=355 uid=10034 gids={3003, 1015}
01-24 10:23:44.724: INFO/ActivityThread(355): Publishing provider browser: com.android.browser.BrowserProvider
01-24 10:23:46.704: INFO/ActivityManager(61): Displayed activity com.android.browser/.BrowserActivity: 2544 ms (total 2544 ms)
01-24 10:23:53.624: WARN/KeyCharacterMap(355): No keyboard for id 0
01-24 10:23:53.624: WARN/KeyCharacterMap(355): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
01-24 10:23:54.574: DEBUG/dalvikvm(348): GC_EXPLICIT freed 3965 objects / 267064 bytes in 2364ms
01-24 10:24:01.064: INFO/ActivityManager(61): Starting activity: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=myapp://twitactivity?oauth_token=KjCUNMKg13OClyRjQff94QWKfoRBUpNLE2uF9cJkHA&oauth_verifier=41owXswx5TsxHhRyiviFRkRvcpdekm7akRa2IFFM cmp=nl.gemoro.android.demo/.TwitterScreen }
01-24 10:24:02.174: INFO/global(348): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
01-24 10:24:03.594: INFO/ActivityManager(61): Displayed activity nl.gemoro.android.demo/.TwitterScreen: 2412 ms (total 2412 ms)

Ответы [ 3 ]

4 голосов
/ 24 января 2011

Вы должны получить данные из сервиса Twitter по вашему onResume() методу

как

  @Override
protected void onResume() {
    super.onResume();
    Uri uri = getIntent().getData();
            Uri CALLBACK_URI = Uri.parse("myapp://twitactivity");
        if (uri != null && CALLBACK_URI.getScheme().equals(uri.getScheme())) {
                String oauth_token=ri.getQueryParameter("oauth_token");
    String oauth_verifier= uri.getQueryParameter("oauth_verifier");
  Intent i = new Intent(this, YourClass.class); // Go to your activity
  startActivity(i); 
                          }

Итак, вы получаете данные из твиттера, и теперь вы начали новую активность

1 голос
/ 08 января 2013

Чтобы правильно позвонить onNewIntent, вам нужно указать lauchMode="singleInstance" или "singleTop" для активности в файле AndroidManifest.xml.

0 голосов
/ 24 января 2011

Я предлагаю вам использовать WebView вместо того, чтобы открывать его в URL.

Я дал ответ , описывающий шаги для успешной реализации twitter.

...