让我们制作一个Twitch Android应用程序。第1部分。应用程序访问令牌
#kotlin #android #mobile #tristan

目录

  1. The tokens needed
  2. Register your application
  3. What is the OAuth Redirect URI
  4. Implicit grant flow
  5. Making the request
  6. Collecting the response
  7. What is next

代码

YouTube版本

简介

  • 我已经开始了我的下一个应用程序,这是一个Twitch客户端应用。这个系列将是我创建此应用时所面临的所有笔记和问题。

获取访问令牌

  • 在我们可以使用Twitch API做任何酷的事情之前,重要的是要了解开发人员为我们提供的两种代币类型。由于所有抽搐API端点都需要这两种令牌类型中的至少一个。

1)用户访问令牌:使我们访问需要用户访问权限的API。这种类型的代币的好处是,我们可以通过Implicit Grant flow检索它,并且如文档所述,我们不必提供客户的秘密。这意味着这种类型的令牌非常适合没有服务器的应用(例如移动应用程序)。不利的一面是,必须登录用户才能访问任何API数据。(this tutorial will be exploring this type of token)

2)应用程序访问令牌:不需要用户权限访问的API使用此类型的令牌。这种类型的令牌是通过authorization code grant flow获得的。此身份验证过程的缺点是需要使用client_secret。这意味着我们不能在不使用反向代理服务器的情况下使应用程序100%安全。但是,好处是,用户不必登录其Twitch帐户即可访问API Data.(this tutorial will not be covering this type of token)

  • 现在我们简要了解了我们使用的令牌,我们可以继续注册应用程序

注册申请

demonstrating the process of registering twitch app

  • 现在,名称可以是您想要的,它必须在Twitch开发人员生态系统中是唯一的

  • 我要引起您注意的部分是OAuth Redirect URIs。如果您以前从未听说过Oauth,我建议您观看此视频HERE,只需确保以2倍的速度观看。如果您不熟悉OAuth移动应用程序的流程,那么我想指出您以前的教程,找到了HERE

Oauth重定向URI是什么?

  • 您可能会注意到我已经使用https://peanutbutterjelly作为重定向URI,但是为什么呢?该URI的唯一限制部分是https,因为Twitch将不允许任何其他类型的协议。 peanutbutterjelly部分纯粹由您决定,因为没有限制。但是,使用com.yourappname(您的应用程序的名称)
  • 是常见的做法
  • 为了使我们正确使用此OAuth Redirect URI,我们必须使用适当的intent-filter。对于此特定的重定向URI,适当的意图过滤器是:
<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="peanutbutterjelly"
        android:scheme="https"
         />
</intent-filter>

  • 请注意,hostscheme与重定向URI的完全相同。他们必须遵循这种模式:

<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>|<pathAdvancedPattern>|<pathSuffix>]

  • 可以找到该模式HERE

为什么我们需要一个意图过滤器?

  • 一旦我们的用户通过浏览器登录到Twitch(我们这样做,因此我们的应用程序不知道用户的用户名或密码。这被认为是最佳实践)。 Android操作系统将发送一个Implicit Intent,以寻找可以使用https://peanutbutterjelly

  • 重定向URI处理意图的任何应用程序
  • 您可以告诉您是否将意图过滤器弄乱了,如果成功的登录后,用户不是将用户引入您的应用程序,而是试图将重定向的URI加载到浏览器中。如果发生这种情况,则意味着您的意图过滤器未正确实现

隐式赠款流(应用程序访问令牌)

  • 现在我们知道了我们正在使用的令牌并设置了一个意图过滤器。我们需要实施implicit grant flow

Implicit flow grant documentation

  • 根据文档,我们需要向https://id.twitch.tv/oauth2/authorize提出请求,并为其提供Client_itredirect_uriresponse_typescope的参数。最终,请求终点看起来像这样:

https://id.twitch.tv/oauth2/authorize?client_id=$clientId&redirect_uri=$redirectUri&response_type=token&scope=user:read:follows

  • 只需将$clientId$redirectUri替换为您的应用程序所特有的值即可。
  • 可以找到范围的范围。我正在使用user:read:follows,这将使我可以查看用户关注的频道列表。现在我们只需要提出一个请求

提出请求

  • 现在,您可能会认为,为了提出请求,我们将使用Retrofit,但实际上我们将发出类似的隐含意图:

val twitchIntent = Intent(
    Intent.ACTION_VIEW, Uri.parse(
        "https://id.twitch.tv/oauth2/authorize?client_id=$clientId&redirect_uri=$redirectUri&response_type=token&scope=user:read:follows")
            )

Button(onClick ={startActivity(twitchIntent)},modifier = Modifier.align(Alignment.Center)) {
            Text("Login with Twitch", fontSize = 30.sp)
        }

  • 单击按钮时,将使用startActivity(twitchIntent)创建隐式意图,并且用户将直接转到默认浏览器应用程序,并将被要求登录

收集响应

  • 从技术上讲,我们将收到隐性意图,并且我们已经设置了意图过滤器来做到这一点。但是现在我们必须从意图中获取数据
  • 为了从意图中检索响应,我们可以在onresume()方法中这样做:
override fun onResume() {
        super.onResume()
       val uri:Uri? = intent.data
        if(uri != null){
            Log.d("Twitch",uri.toString())
        }
    }

  • 如果一切都正确,我们应该得到:
https://peanutbutterjelly/#access_token=px4db8qo0uuaq75350id57h0ub6sze&scope=user%3Aread%3Afollows&token_type=bearer

下一步是什么?

  • 在下一个教程中,我们将考虑使用此令牌来访问所有人遵循的所有流媒体

结论

  • 感谢您抽出宝贵的时间阅读我的博客文章。如果您有任何疑问或疑虑,请在下面发表评论或在Twitter上与我联系。