Как работает Twitter OAuth в Android? - PullRequest
15 голосов
/ 22 августа 2011

Я довольно долго искал ответ и признаюсь, что застрял.Я пытаюсь внедрить Twitter в свое приложение, и мне это показалось сложным.Кажется, способ сделать это - зарегистрировать мое приложение в Twitter (я уже сделал это) в качестве приложения браузера.Я не знаю, что использовать для моего URL обратного вызова, хотя.Я действительно хочу просто вернуться к своей текущей активности в приложении, а не перенаправляться на URL обратного вызова.Что я должен положить для этого?Я застрял ...

Ответы [ 2 ]

28 голосов
/ 22 августа 2011

Вот как это работает ... вы делаете вызов для аутентификации в Twitter (открывая веб-браузер). URL аутентификации должен содержать URL обратного вызова. URL обратного вызова обычно выглядит так: x-your-application-name-oauth-twitter://callback (*).

Второй шаг - добавить фильтр намерений к вашему Activity (реализация аутентификации в твиттере требует, чтобы вы знали, как работает Android (если вы не найдете учебник, который сделает все за вас, но я думаю, что это не тот случай, который вам кажется будь умным парнем, не так ли?)). Как бы то ни было, вы делаете это, добавляя что-то подобное в манифест:

<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="x-your-application-name-oauth-twitter" android:host="callback"/>
</intent-filter>

Это в основном способ сказать ОС Android: " Эй, чувак, я могу обработать любой URL, который выглядит как x-your-application-name-oauth-twitter://callback". Таким образом, после аутентификации пользователя твиттер позвонит по этому URL, а ваше приложение восстановит управление.

Обычно ваша активность должна создаваться с помощью тега android:launchMode="singleTask", тогда вы должны переопределить метод вашей деятельности onNewIntent, который будет вызван, когда ваше приложение снова получит контроль. Внутри Intent вы найдете информацию об обратном вызове.

(*) Создать URL-адрес, который вы должны запустить (и который позволит пользователям проходить аутентификацию), довольно сложно. OAuth - хороший, но сложный в освоении стандарт. Таким образом, вы можете использовать сторонние библиотеки, которые помогут вам в этом. Например, вы можете использовать Java-библиотеку Oauth Signpost. Однако я бы порекомендовал вам придерживаться библиотеки twitter4j, которая поможет вам с OAuth, а также позволит вам взаимодействовать с Twitter API.

0 голосов
/ 30 июня 2018

Что касается GDPR, войти через Twitter можно будет только в приложении с URL-адресами обратного вызова из белого списка. Мобильные приложения с протоколами для конкретных приложений должны использовать только протокол. Например, используйте twittersdk: // вместо twittersdk: // authorize для URL-адресов обратного вызова в настройках вашего приложения на apps.twitter.com

Подробный пример приведен ниже:

  1. Для начала Посетите apps.twitter.com , чтобы создать приложение. Укажите такие данные, как имя приложения, описание приложения, веб-сайт приложения, URL-адреса обратного вызова (как указано выше, используйте

twittersdk: //

в качестве URL-адреса для обратного вызова в случае приложения ANDROID) и разрешить использование этого приложения для входа в систему через Twitter.

  1. После успешного создания приложения в учетной записи разработчика в Твиттере добавьте следующие зависимости в конфигурацию Gradle вашего приложения (обычно это app / build.gradle).

compile 'com.twitter.sdk.android:twitter:3.1.1'

  1. Инициализация Twitter Kit (необязательно)

Если вы используете собственный класс Application, вы можете инициализировать Twitter Kit в методе onCreate ().

public class CustomApplication {
  public void onCreate() {
    Twitter.initialize(this);
  }
}
  1. добавьте Ключ потребителя (ключ API) и Секрет потребителя (Секрет API) к ресурсам вашего приложения. Вы можете получить это в настройках вашего приложения на apps.twitter.com

<resources>
      <string android:name="com.twitter.sdk.android.CONSUMER_KEY">XXXXXXXXXXX</string>
      <string android:name="com.twitter.sdk.android.CONSUMER_SECRET">XXXXXXXXXXX</string>
    </resources>
  1. Внутри вашего макета добавьте кнопку входа со следующим кодом:

<com.twitter.sdk.android.core.identity.TwitterLoginButton
     android:id="@+id/login_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
  1. В «Деятельности» или «Фрагменте», где отображается кнопка, необходимо создать и прикрепить обратный вызов к кнопке входа в систему.

import com.twitter.sdk.android.core.Callback; import com.twitter.sdk.android.core.Result; import com.twitter.sdk.android.core.TwitterException; import com.twitter.sdk.android.core.TwitterSession; import com.twitter.sdk.android.core.identity.TwitterLoginButton; ...

loginButton = (TwitterLoginButton) findViewById(R.id.login_button);
loginButton.setCallback(new Callback<TwitterSession>() {
   @Override
   public void success(Result<TwitterSession> result) {
       // Do something with result, which provides a TwitterSession for making API calls
   }

   @Override
   public void failure(TwitterException exception) {
       // Do something on failure
   }
});
  1. Затем передайте результат действия аутентификации обратно на кнопку:

@ Переопределить защищенный void onActivityResult (int requestCode, int resultCode, Intent data) { super.onActivityResult (requestCode, resultCode, data);

// Pass the activity result to the login button.
loginButton.onActivityResult(requestCode, resultCode, data); }

ИЛИ Если вы используете TwitterLoginButton во фрагменте, используйте следующие шаги. Внутри действия, в котором находится фрагмент, передайте результат действия в фрагмент.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Pass the activity result to the fragment, which will then pass the result to the login
    // button.
    Fragment fragment = getFragmentManager().findFragmentById(R.id.your_fragment_id);
    if (fragment != null) {
        fragment.onActivityResult(requestCode, resultCode, data);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...