awslabs / amazon-kinesis-video-streams-webrtc-sdk-android

Android SDK for interfacing with Amazon Kinesis Video Streams Signaling Service.
Apache License 2.0
58 stars 37 forks source link

Create client failed with Failed to get credentials from Cognito Identity #12

Closed jarvislin closed 4 years ago

jarvislin commented 4 years ago

Hi, I followed README document and created account / logged in successfully in sample App. But I got an error in Step 5. when I clicked START MASTER or START VIEWER.

It showed me a dialog with text:

Create client failed with Failed to get credentials from Cognito Identity

I had filled everything in awsconfiguration.json, but still got the same error. Should I put additional code in the sample app's project?

-- and there are the logs:

2020-02-07 18:08:07.149 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/AWSMobileClient: Inspecting user state details
2020-02-07 18:08:07.151 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 W/AWSMobileClient: Could not check if ACCESS_NETWORK_STATE permission is available.
    java.lang.ClassNotFoundException: android.support.v4.content.ContextCompat
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:454)
        at java.lang.Class.forName(Class.java:379)
        at com.amazonaws.mobile.client.AWSMobileClient.isNetworkAvailable(AWSMobileClient.java:751)
        at com.amazonaws.mobile.client.AWSMobileClient.getUserStateDetails(AWSMobileClient.java:963)
        at com.amazonaws.mobile.client.AWSMobileClient.waitForSignIn(AWSMobileClient.java:903)
        at com.amazonaws.mobile.client.AWSMobileClient.getCredentials(AWSMobileClient.java:355)
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment.getAwsKinesisVideoClient(StreamWebRtcConfigurationFragment.java:272)
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment.access$300(StreamWebRtcConfigurationFragment.java:53)
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment$UpdateSignalingChannelInfoTask.doInBackground(StreamWebRtcConfigurationFragment.java:315)
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment$UpdateSignalingChannelInfoTask.doInBackground(StreamWebRtcConfigurationFragment.java:301)
        at android.os.AsyncTask$3.call(AsyncTask.java:378)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:919)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.content.ContextCompat" on path: DexPathList[[zip file "/data/app/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24-ttKHgwh5NhSfMdsM27YbIQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24-ttKHgwh5NhSfMdsM27YbIQ==/lib/arm64, /data/app/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24-ttKHgwh5NhSfMdsM27YbIQ==/base.apk!/lib/arm64-v8a, /system/lib64, /product/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at java.lang.Class.classForName(Native Method) 
        at java.lang.Class.forName(Class.java:454) 
        at java.lang.Class.forName(Class.java:379) 
        at com.amazonaws.mobile.client.AWSMobileClient.isNetworkAvailable(AWSMobileClient.java:751) 
        at com.amazonaws.mobile.client.AWSMobileClient.getUserStateDetails(AWSMobileClient.java:963) 
        at com.amazonaws.mobile.client.AWSMobileClient.waitForSignIn(AWSMobileClient.java:903) 
        at com.amazonaws.mobile.client.AWSMobileClient.getCredentials(AWSMobileClient.java:355) 
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment.getAwsKinesisVideoClient(StreamWebRtcConfigurationFragment.java:272) 
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment.access$300(StreamWebRtcConfigurationFragment.java:53) 
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment$UpdateSignalingChannelInfoTask.doInBackground(StreamWebRtcConfigurationFragment.java:315) 
        at com.amazonaws.kinesisvideo.demoapp.fragment.StreamWebRtcConfigurationFragment$UpdateSignalingChannelInfoTask.doInBackground(StreamWebRtcConfigurationFragment.java:301) 
        at android.os.AsyncTask$3.call(AsyncTask.java:378) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:289) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:919) 
2020-02-07 18:08:07.152 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/AWSMobileClient: waitForSignIn: userState:SIGNED_OUT
2020-02-07 18:08:07.152 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/CognitoCachingCredentialsProvider: Loading credentials from SharedPreferences
2020-02-07 18:08:07.155 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 E/AWSKeyValueStore: com.amazonaws.internal.keyvaluestore.KeyNotFoundException: Error occurred while accessing AndroidKeyStore to retrieve the key for keyAlias: com.amazonaws.android.auth.aesKeyStoreAlias
2020-02-07 18:08:07.155 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 I/AWSKeyValueStore: Deleting the encryption key identified by the keyAlias: com.amazonaws.android.auth.aesKeyStoreAlias
2020-02-07 18:08:07.156 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 E/AWSKeyValueStore: Error in retrieving the decryption key used to decrypt the data from the persistent store. Returning null for the requested dataKey = (MY PoolId here).expirationDate
2020-02-07 18:08:07.156 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/CognitoCachingCredentialsProvider: No valid credentials found in SharedPreferences
2020-02-07 18:08:07.156 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/CognitoCachingCredentialsProvider: Making a network call to fetch credentials.
2020-02-07 18:08:07.651 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/CognitoCachingCredentialsProvider: Identity id is changed
2020-02-07 18:08:07.651 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/CognitoCachingCredentialsProvider: Saving identity id to SharedPreferences
2020-02-07 18:08:07.651 24069-24367/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 D/CognitoCachingCredentialsProvider: Clearing credentials from SharedPreferences
2020-02-07 18:08:07.804 24069-24069/com.amazonaws.kinesisvideo.webrtc.demoapp.minsdk24 I/Choreographer: Skipped 39 frames!  The application may be doing too much work on its main thread.
zhiyua-git commented 4 years ago

Hi @jarvislin , as you are able to sign in and see the page with start master/start viewer, I think you have the cognito setup properly. But maybe due to previous trial, some leftover persistence of credential of expired session stays in your app. Click on left-top menu, you will find the Logout option. Try log out and log in again to see if the issue persists.

If logout doesn't help, can you also provide your android device information and OS version so we can see if we can reproduce the issue?

jarvislin commented 4 years ago

@zhiyua-git I found there are two PoolId in awsconfiguration.json, and they should be different. This issue is solved after I changed the value. Thanks you.