Android Spotify SDK 登录错误意外 token

标签 android json authentication uri spotify

我正在尝试在 Android 应用程序上实现 Spotify SDK,当我单击按钮时,Spotify Activity 正常启动,但是当我尝试登录时,没有任何反应,它会记录一个意外 token 错误 ,我使用了与 Spotify 教程中完全相同的代码,希望你能帮忙

    06-29 13:40:36.677 4708-4708/com.app.project.silverbars I/chromium: [INFO:async_pixel_transfer_manager_android.cc(60)] Async pixel transfers not supported
06-29 13:40:36.789 4708-4708/com.app.project.silverbars I/chromium: [INFO:async_pixel_transfer_manager_android.cc(60)] Async pixel transfers not supported
06-29 13:40:37.505 4708-4708/com.app.project.silverbars D/dalvikvm: GC_FOR_ALLOC freed 1600K, 15% free 9975K/11700K, paused 6ms, total 6ms
06-29 13:41:02.605 4708-4708/com.app.project.silverbars I/chromium: [INFO:CONSOLE(6)] "SyntaxError: Unexpected token I
                                                                        at Object.parse (native)
                                                                        at Y (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:5:6501)
                                                                        at xt (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:6:14454)
                                                                        at https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:6:14923
                                                                        at i (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:5:1297)
                                                                        at Tt (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:6:14933)
                                                                        at o (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:6:15632)
                                                                        at s (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:7:2578)
                                                                        at https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:7:2750
                                                                        at f.$eval (https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js:7:10267)", source: https://d2d1dxiu3v1f2i.cloudfront.net/19b92cb/js/index.js (6)

Spotify Activity :

public class SpotifyMusic extends AppCompatActivity implements
        PlayerNotificationCallback, ConnectionStateCallback {

    // TODO: Replace with your client ID
    private static final String CLIENT_ID = "b51d25ed8e514fa5927c028d5827a358";
    // TODO: Replace with your redirect URI
    private static final String REDIRECT_URI = "yourcustomprotocol://callback";

    // Request code that will be passed together with authentication result to the onAuthenticationResult callback
    // Can be any integer
    private static final int REQUEST_CODE = 1337;

    private Player mPlayer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_spotify_music);

        AuthenticationRequest.Builder builder =
                new AuthenticationRequest.Builder(CLIENT_ID, AuthenticationResponse.Type.TOKEN, REDIRECT_URI);
        builder.setScopes(new String[]{"user-read-private", "streaming"});
        AuthenticationRequest request = builder.build();

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

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

        // Check if result comes from the correct activity
        if (requestCode == REQUEST_CODE) {
            AuthenticationResponse response = AuthenticationClient.getResponse(resultCode, intent);
            if (response.getType() == AuthenticationResponse.Type.TOKEN) {
                Config playerConfig = new Config(this, response.getAccessToken(), CLIENT_ID);
                mPlayer = Spotify.getPlayer(playerConfig, this, new Player.InitializationObserver() {
                    @Override
                    public void onInitialized(Player player) {
                        mPlayer.addConnectionStateCallback(SpotifyMusic.this);
                        mPlayer.addPlayerNotificationCallback(SpotifyMusic.this);
                        mPlayer.play("spotify:track:2TpxZ7JUBn3uw46aR7qd6V");
                    }

                    @Override
                    public void onError(Throwable throwable) {
                        Log.e("MainActivity", "Could not initialize player: " + throwable.getMessage());
                    }
                });
            }
        }
    }

    @Override
    public void onLoggedIn() {
        Log.d("MainActivity", "User logged in");
    }

    @Override
    public void onLoggedOut() {
        Log.d("MainActivity", "User logged out");
    }

    @Override
    public void onLoginFailed(Throwable error) {
        Log.d("MainActivity", "Login failed");
    }

    @Override
    public void onTemporaryError() {
        Log.d("MainActivity", "Temporary error occurred");
    }

    @Override
    public void onConnectionMessage(String message) {
        Log.d("MainActivity", "Received connection message: " + message);
    }

    @Override
    public void onPlaybackEvent(EventType eventType, PlayerState playerState) {
        Log.d("MainActivity", "Playback event received: " + eventType.name());
        switch (eventType) {
            // Handle event type as necessary
            default:
                break;
        }
    }

    @Override
    public void onPlaybackError(ErrorType errorType, String errorDetails) {
        Log.d("MainActivity", "Playback error received: " + errorType.name());
        switch (errorType) {
            // Handle error type as necessary
            default:
                break;
        }
    }

    @Override
    protected void onDestroy() {
        // VERY IMPORTANT! This must always be called or else you will leak resources
        Spotify.destroyPlayer(this);
        super.onDestroy();
    }
}

最佳答案

你得到的实际上是 JSON.parse() 的 JSON 错误

Throws a SyntaxError exception if the string to parse is not valid JSON.

查看您的代码后,我发现您没有严格按照教程进行操作。说明

The completed code of MainActivity.java should now look like this, but with your own client ID and redirect URI:

因为你的redirect URI没有设置

private static final String REDIRECT_URI = "yourcustomprotocol://callback";

您的 URI 无法解析。这与您的错误并非巧合,因为在登录过程中使用了重定向 URI,并且基本上是 客户在成功帐户授权后将发送到的位置

关于如何设置它,我帮不了你太多,因为我没有使用过 Spotify SDK,但你可以使用类似的东西

private static final String REDIRECT_URI = "http://localhost:PORT_NUMBER://authenticationResponse"

PORT_NUMBER 可以是任何大于 1024 的值

有关更多信息,这个问题可能会有帮助:Spotify redirect URI .

希望你能解决这个问题。

关于Android Spotify SDK 登录错误意外 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38107663/

相关文章:

android - 如何同时处理 OnTouchListener 事件和 OnClickListener 事件

javascript - 与 insertOne 函数一起使用时,MongoDB 架构不插入属性

asp.net-mvc - 基于角色的 ASP.NET MVC 登录和重定向

android - 我怎样才能打开安卓摄像机的高清模式?

android - Firebase childeventlistener 的后台服务在几分钟后不工作

ruby-on-rails - Json gem 安装失败。 Xcode 已经安装并且是最新的

javascript - 如何减小 AspNet.ApplicationCookie 的大小以及其中的内容?

angularjs - Node.js 和 AngularJS 实现身份验证和授权机制的最快、最简单的方法

java - 单击按钮从回收器 View 中删除项目。按钮是从回收器 View 外部设置的吗?

javascript - Angularjs 带有 json 的多个数组