我正在尝试在 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/