Java 如何认证Android应用程序以连接Spotify?
我想在我的手机上创建我自己的(非商业)DDR应用程序,使用Spotify的音乐进行娱乐 到目前为止,我已尝试遵循快速入门教程:Java 如何认证Android应用程序以连接Spotify?,java,android,spotify,Java,Android,Spotify,我想在我的手机上创建我自己的(非商业)DDR应用程序,使用Spotify的音乐进行娱乐 到目前为止,我已尝试遵循快速入门教程: 我已经创建了一个模板应用程序,在android studio中只有一个hello world屏幕 我安装了spotify应用程序,并使用高级帐户登录 我去了spotify开发者面板并注册了我的应用程序。我的应用程序现在叫做MyDDR 我将重定向URI设置为192.168.1.23:5000/callback,这是一个在我的PC上运行的flask服务器。我测
- 我已经创建了一个模板应用程序,在android studio中只有一个hello world屏幕
- 我安装了spotify应用程序,并使用高级帐户登录
- 我去了spotify开发者面板并注册了我的应用程序。我的应用程序现在叫做MyDDR
- 我将重定向URI设置为
,这是一个在我的PC上运行的flask服务器。我测试了它,我的手机可以连接到它。我不知道这是否相关,因为目前没有由我的代码触发的流量192.168.1.23:5000/callback
- 然后,我将我的指纹和软件包名称添加到我在spotify开发者仪表板中注册的应用程序中。以下是我的结果:
- 我创建了一个签名包,并在教程中创建了一个密钥库。 我只做了“注册应用程序指纹”部分,因为该页面似乎只是我已经在遵循的quickstart指南的旧版本
- 运行gradle任务
时,通过手动检查我的密钥库中的SHA1密钥,发现了它signingReport
com.example.myddr
- 我下载了Spotify Android SDK,下载了
文件,并将其添加为一个新模块。我将模块/项目与gson一起添加到build.gradle(模块:app)依赖项中,如教程所示Spotify-app-remote-release-0.6.3.aar
- 现在,我已准备好执行“使用内置身份验证流授权用户”步骤
package com.example.myddr;
导入android.os.Bundle;
导入android.util.Log;
导入androidx.appcompat.app.appcompat活动;
导入com.spotify.android.appremote.api.ConnectionParams;
导入com.spotify.android.appremote.api.Connector;
导入com.spotify.android.appremote.api.SpotifyAppRemote;
导入com.spotify.protocol.client.Subscription;
导入com.spotify.protocol.types.PlayerState;
导入com.spotify.protocol.types.Track;
公共类MainActivity扩展了AppCompatActivity{
私有静态最终字符串客户端_ID=“2D6A5307B024E7B9B32D52146150986”;
私有静态最终字符串重定向_URI=”http://192.168.1.23:5000/callback";
私人SpotifyAppRemote MSPottifyAppremote;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@凌驾
受保护的void onStart(){
super.onStart();
ConnectionParams ConnectionParams=
新建ConnectionParams.Builder(客户端ID)
.setRedirectUri(重定向URI)
.showAuthView(真)
.build();
SpotifyAppRemote.connect(此,connectionParams,
新连接器.ConnectionListener(){
连接的公共空间(SpotifyAppRemote SpotifyAppRemote){
mspotifiappremote=spotifyAppRemote;
Log.d(“MainActivity”,“Connected!Yay!”);
//现在,您可以开始与应用程序远程交互
连接的();
}
失败时的公共无效(可丢弃){
Log.e(“MainActivity”,throwable.getMessage(),throwable);
//尝试连接时出错!请在此处处理错误
}
});
}
私有连接(){
}
}
但是,在运行此命令时,我会收到很多类似这样的警告:
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 28
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 31
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 28
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 31
最后是一个错误:
E/MainActivity: {"message":"com.spotify.mobile.android.spotlets.appprotocol.model.AppProtocol$Message"}
com.spotify.android.appremote.api.error.AuthenticationFailedException: {"message":"com.spotify.mobile.android.spotlets.appprotocol.model.AppProtocol$Message"}
at com.spotify.android.appremote.api.LocalConnector.asAppRemoteException(LocalConnector.java:131)
at com.spotify.android.appremote.api.LocalConnector.access$000(LocalConnector.java:35)
at com.spotify.android.appremote.api.LocalConnector$1.onConnectionFailed(LocalConnector.java:111)
at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:142)
at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:75)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: com.spotify.protocol.client.error.RemoteClientException: {"message":"com.spotify.mobile.android.spotlets.appprotocol.model.AppProtocol$Message"}
at com.spotify.protocol.client.RemoteWampClient.getRemoteClientException(RemoteWampClient.java:139)
at com.spotify.protocol.client.RemoteWampClient.access$200(RemoteWampClient.java:16)
at com.spotify.protocol.client.RemoteWampClient$1.onAbort(RemoteWampClient.java:44)
at com.spotify.protocol.client.WampRouterImpl.routeAbort(WampRouterImpl.java:100)
at com.spotify.protocol.client.WampRouterImpl.route(WampRouterImpl.java:26)
at com.spotify.protocol.client.AppProtocolCommunicator.onData(AppProtocolCommunicator.java:78)
at com.spotify.android.appremote.internal.RemoteServiceIo.handleMessage(RemoteServiceIo.java:113)
at com.spotify.android.appremote.internal.RemoteServiceIo.access$000(RemoteServiceIo.java:47)
at com.spotify.android.appremote.internal.RemoteServiceIo$IncomingHandler.handleMessage(RemoteServiceIo.java:91)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
此错误意味着由于AuthenticationFailedException,我无法连接到Spotify。谷歌搜索错误并没有带来令人满意的解决方案。我只找到忘记注册指纹的人,但据我所知,我已经注册了。但我也怀疑我做得不对,因为这看起来相当复杂
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 28
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/HelloDetails; annotation class 31
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 28
W/m.example.mydd: Unable to resolve Lcom/spotify/protocol/types/Info; annotation class 31
E/MainActivity: {"message":"com.spotify.mobile.android.spotlets.appprotocol.model.AppProtocol$Message"}
com.spotify.android.appremote.api.error.AuthenticationFailedException: {"message":"com.spotify.mobile.android.spotlets.appprotocol.model.AppProtocol$Message"}
at com.spotify.android.appremote.api.LocalConnector.asAppRemoteException(LocalConnector.java:131)
at com.spotify.android.appremote.api.LocalConnector.access$000(LocalConnector.java:35)
at com.spotify.android.appremote.api.LocalConnector$1.onConnectionFailed(LocalConnector.java:111)
at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:142)
at com.spotify.android.appremote.internal.SdkRemoteClientConnector$ConnectionTask.onPostExecute(SdkRemoteClientConnector.java:75)
at android.os.AsyncTask.finish(AsyncTask.java:695)
at android.os.AsyncTask.access$600(AsyncTask.java:180)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: com.spotify.protocol.client.error.RemoteClientException: {"message":"com.spotify.mobile.android.spotlets.appprotocol.model.AppProtocol$Message"}
at com.spotify.protocol.client.RemoteWampClient.getRemoteClientException(RemoteWampClient.java:139)
at com.spotify.protocol.client.RemoteWampClient.access$200(RemoteWampClient.java:16)
at com.spotify.protocol.client.RemoteWampClient$1.onAbort(RemoteWampClient.java:44)
at com.spotify.protocol.client.WampRouterImpl.routeAbort(WampRouterImpl.java:100)
at com.spotify.protocol.client.WampRouterImpl.route(WampRouterImpl.java:26)
at com.spotify.protocol.client.AppProtocolCommunicator.onData(AppProtocolCommunicator.java:78)
at com.spotify.android.appremote.internal.RemoteServiceIo.handleMessage(RemoteServiceIo.java:113)
at com.spotify.android.appremote.internal.RemoteServiceIo.access$000(RemoteServiceIo.java:47)
at com.spotify.android.appremote.internal.RemoteServiceIo$IncomingHandler.handleMessage(RemoteServiceIo.java:91)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)