2013-11-12 3 views
2

Я реализую часть OAuth некоторых твиттерных работ, но мне трудно получить обратный вызов там, где я ожидаю. Я отправляю пользователя в браузер для авторизации приложения, но обратный вызов запускает новое действие, а не возвращается к активности, которая его отправила. С эмулятором, задняя стек выглядит следующим образом:Android Twitter OAuth callback

TwitterActivity -> Вместо этого старта, я хочу, чтобы вернуться к исходному один

BrowserActivity

TwitterActivity -> Это посылает запрос браузер

у меня есть SingleTop набор для деятельности:

<activity 
    android:name=".TwitterSearchActivity" 
    android:theme="@style/Theme.Sherlock.Light" 
    android:configChanges="orientation" 
    android:launchMode="singleTop" > 

    <!-- Used for OAuth callback --> 
    <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:host="callback" 
      android:scheme="twitter-search-callback" /> 
    </intent-filter> 

</activity> 

Так что я бы ожидать, что вместо того, чтобы получать новая активность была создана, чтобы исходный получал onNewIntent(), но этого не происходит.

Вот код, чтобы запустить браузер в случае важно:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(token.getAuthenticationURL())); 
    startActivity(intent); 

ответ

2

В конце концов, что я сделал, вместо того чтобы отправить его в браузер, я создал свою собственную WebView активность и может затем запустите намерение оттуда. На самом WebView У меня есть этот клиент:

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 

     if(url.contains(mScheme)) { 

      finish(); 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
      startActivity(intent); 

      return true; 
     } 

     view.loadUrl(url); 
     return true; 
    } 
... 

Обратите внимание, что ключ, отделка() вызывается до startIntent, чтобы стек активность затем имеет стартовую активность (TwitterActivity в оригинале вопрос) сверху и в этом случае, помеченный как singleTop, он будет снова поднят и получит намерение с помощью метода onNewIntent.

+0

Проблема с использованием веб-представления заключается в том, что пользователь понятия не имеет, что вы делаете в этом веб-просмотре. Злоумышленник может даже попытаться вырвать пароли пользователей. Люди, которые ценят свою безопасность, вероятно, предпочтут использовать свой стандартный веб-браузер –

+0

Справедливая точка зрения, но как же мне обойти эту проблему? Большинство приложений, которые я видел, которые используют facebook login, имеют веб-просмотр, накладывающийся на собственную активность, не выходя из приложения. – steprobe

Смежные вопросы