Spotify身份验证库在登录时返回Type.EMPTY

时间:2018-08-01 10:06:09

标签: android authentication retrofit spotify spotify-app

我关注了the android authentication guidequick start guide中的所有内容。我按照指南的指示进行操作,以生成一个SHA1并将其添加到Spotify应用仪表板,然后我获得了app_client并将其添加到我的应用中。两种情况仍然返回同一件事。我什至尝试实现“通过浏览器登录”功能,但仍返回EMPTY类型。

这是我的登录课程

class SignInActivity : AppCompatActivity(), ConnectionStateCallback, Player.NotificationCallback {

private var mPlayer : SpotifyPlayer? = null

private val CLIENT_ID = //replace this
private val REDIRECT_URI = //replace this
private val REQUEST_CODE = 1337


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_login)

    btnSignin.setOnClickListener {
        val builder = AuthenticationRequest.Builder(CLIENT_ID, AuthenticationResponse.Type.TOKEN, REDIRECT_URI)
        builder.setScopes(arrayOf("user-read-private", "streaming"))
        val request = builder.build()

        AuthenticationClient.openLoginActivity(this, REQUEST_CODE, request)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, intent)

    // Check if result comes from the correct activity
    if (requestCode == REQUEST_CODE) {
        val response = AuthenticationClient.getResponse(resultCode, intent)

        Log.i("LoginActivity", Gson().toJson(response))

        when (response.type) {
        // Response was successful and contains auth token
            AuthenticationResponse.Type.TOKEN -> {
                Log.i("LoginActivity", "is equals to TOKEN")

                val playerConfig = Config(this, response.accessToken, CLIENT_ID)
                Spotify.getPlayer(playerConfig, this, object : SpotifyPlayer.InitializationObserver {
                    override fun onInitialized(spotifyPlayer: SpotifyPlayer) {
                        mPlayer = spotifyPlayer
                        mPlayer!!.addConnectionStateCallback(this@SignInActivity)
                        mPlayer!!.addNotificationCallback(this@SignInActivity)
                    }

                    override fun onError(throwable: Throwable) {
                        Log.e("LoginActivity", "Could not initialize player: " + throwable.message)
                    }
                })
            }

        // Auth flow returned an error
            AuthenticationResponse.Type.ERROR -> {
                Log.i("LoginActivity", "ERROR!: $response.error")
            }

            AuthenticationResponse.Type.EMPTY -> {
                Log.i("LoginActivity", "EMPTY!")
            }
        }
    }
}

override fun onLoggedIn() {
    Log.d("LoginActivity", "User logged in")

    // This is the line that plays a song.
    mPlayer!!.playUri(null, "spotify:track:2TpxZ7JUBn3uw46aR7qd6V", 0, 0)
}
}

这是我的AndroidManifest文件 `

<uses-permission android:name="android.permission.INTERNET"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".SignInActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
            <data
                android:host="callback"
                android:scheme="backdrop.io"/>
        </intent-filter>
    </activity>
    <activity
        android:name="com.spotify.sdk.android.authentication.LoginActivity"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
</application>

我正在尝试从中获取Type.TOKEN

1 个答案:

答案 0 :(得分:1)

我自己也遇到了同样的问题,问题出在onActivityResult()中的这一行:

val response = AuthenticationClient.getResponse(resultCode, intent)

data应该作为第二个参数而不是intent传递。

这不是编译器错误的原因是由于Kotlin将getter和setter转换为属性,intent是对Activity方法getIntent()的调用。

相关问题