Java 如何认证Android应用程序以连接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服务器。我测

我想在我的手机上创建我自己的(非商业)DDR应用程序,使用Spotify的音乐进行娱乐

到目前为止,我已尝试遵循快速入门教程:

  • 我已经创建了一个模板应用程序,在android studio中只有一个hello world屏幕

  • 我安装了spotify应用程序,并使用高级帐户登录

  • 我去了spotify开发者面板并注册了我的应用程序。我的应用程序现在叫做MyDDR

  • 我将重定向URI设置为
    192.168.1.23:5000/callback
    ,这是一个在我的PC上运行的flask服务器。我测试了它,我的手机可以连接到它。我不知道这是否相关,因为目前没有由我的代码触发的流量

  • 然后,我将我的指纹和软件包名称添加到我在spotify开发者仪表板中注册的应用程序中。以下是我的结果:

  • 我创建了一个签名包,并在教程中创建了一个密钥库。 我只做了“注册应用程序指纹”部分,因为该页面似乎只是我已经在遵循的quickstart指南的旧版本

  • 运行gradle任务
    signingReport
    时,通过手动检查我的密钥库中的SHA1密钥,发现了它

我不熟悉签名应用程序,所以我不确定它是否正确。 据我所知,我只需要关心调试,对吗?我没有计划把这个发布到游戏商店

  • 以下是我的android studio设置:
  • 如您所见,我的包名是
    com.example.myddr

  • 最后,我在spotify开发者面板中添加了我的包名和指纹:
    • 我下载了Spotify Android SDK,下载了
      Spotify-app-remote-release-0.6.3.aar
      文件,并将其添加为一个新模块。我将模块/项目与gson一起添加到build.gradle(模块:app)依赖项中,如教程所示
    • 现在,我已准备好执行“使用内置身份验证流授权用户”步骤
    这是到目前为止的代码

    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)