【问题标题】:How does Twitter OAuth work in Android?Twitter OAuth 在 Android 中是如何工作的?
【发布时间】:2011-11-01 07:18:42
【问题描述】:

我一直在寻找答案很长一段时间,我承认我很困惑。我正在尝试在我的应用程序中实现 Twitter,但发现它有些挑战。似乎这样做的方法是将我的应用程序注册到 Twitter(我已经这样做了)作为浏览器应用程序。我不知道我的回调 url 用什么。我真的只想返回应用程序中的当前活动,而不是重定向到回调 url。我应该为此付出什么?我被困住了......

【问题讨论】:

    标签: android url twitter callback


    【解决方案1】:

    这就是它的工作原理...您调用 twitter 身份验证 URL(通过打开 Web 浏览器)。认证的 URL 必须包含回调 URL。回调 URL 通常如下所示:x-your-application-name-oauth-twitter://callback (*)。

    第二步是在你的Activity 中添加一个意图过滤器(实现 twitter auth 需要你知道 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 操作系统说的方式:“嘿伙计,我可以处理任何看起来像 x-your-application-name-oauth-twitter://callback 的 URL。这样,一旦用户通过身份验证,twitter 将调用该 URL,您的应用程序将收回控制权。

    通常,您的活动必须使用android:launchMode="singleTask" 标签创建,然后您必须覆盖活动的onNewIntent 方法,一旦您的应用程序再次获得控制权,该方法将被调用。在Intent 中,您将找到有关回调的信息。

    (*) 构建您必须启动的 URL(这将允许用户进行身份验证)有些困难。 OAuth 是一个很好但很难学习的标准。因此,您可以使用可以帮助您解决此问题的第三方库。例如,您可以使用 Oauth Signpost Java 库。但是,我建议您坚持使用 twitter4j 库,该库将帮助您使用 OAuth 并允许您与 Twitter API 进行交互。

    【讨论】:

    • 问题:请告诉我要放入什么,android:scheme="x-your-application-name-oauth-twitter"
    • 如果你的应用叫做FooBar,你可以输入android:scheme="foo-bar-oauth-twitter";如果您的应用名为 Tushar Pandey,您将使用 android:scheme="tushar-pandey-oauth-twitter" 等。
    • “回调”是字面意思还是应该被替换?
    • 可以/应该更换
    • 方案部分:android:scheme="x-your-application-name-oauth-twitter" 是谷歌搜索一整天后唯一对我有用的部分,谢谢。
    【解决方案2】:

    从 GDPR 开始,只有在具有白名单回调 URL 的应用中才能使用 Twitter 登录。具有应用程序特定协议的移动应用程序必须仅使用该协议。例如,请使用 twittersdk:// 而不是 twittersdk://authorize 在您的应用设置中apps.twitter.com

    中的回调 URL

    详细示例见下:

    1. 开始访问apps.twitter.com 以创建应用程序。提供应用程序名称、应用程序描述、应用程序网站、回调 URL 等详细信息(如上所述,请使用

    twittersdk://

    作为 ANDROID 应用程序的回调 URL)并允许此应用程序用于使用 Twitter 登录。

    1. 在 twitter 开发者帐户上成功创建应用后,将以下依赖项添加到应用的 Gradle 配置(通常是 app/build.gradle)中。

    编译'com.twitter.sdk.android:twitter:3.1.1'

    1. 初始化 Twitter 工具包(可选)

    如果使用自定义应用程序类,您可以在 onCreate() 方法中初始化 Twitter Kit。

    public class CustomApplication {
      public void onCreate() {
        Twitter.initialize(this);
       }
     }
    
    1. 将您的Consumer Key(API 密钥)和Consumer Secret(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. 在显示按钮的 Activity 或 Fragment 中,您需要创建回调并将其附加到登录按钮。
    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. 接下来,将认证Activity的结果传回给按钮:
     @Override protected 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,请改用以下步骤。在托管 Fragment 的 Activity 内部,将 Activity 的结果传递给 Fragment。

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

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2011-01-19
      • 2015-09-12
      • 2011-12-26
      • 2010-12-19
      • 1970-01-01
      • 2012-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多