Aws-sdk-android: Offline Pinpoint initialisation crash the app

Created on 21 Nov 2018  路  10Comments  路  Source: aws-amplify/aws-sdk-android

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Put the mobile offline
  2. open the app and initialise the Pinpoint service
  3. sometimes the app crash with this log:
Fatal Exception: java.lang.RuntimeException: Failed to get credentials from Cognito Identity
       at com.amazonaws.mobile.client.AWSMobileClient.getCredentials(AWSMobileClient.java:265)
       at com.amazonaws.services.pinpoint.AmazonPinpointClient.invoke(AmazonPinpointClient.java:3872)
       at com.amazonaws.services.pinpoint.AmazonPinpointClient.updateEndpoint(AmazonPinpointClient.java:3630)
       at com.amazonaws.mobileconnectors.pinpoint.targeting.TargetingClient$1.run(TargetingClient.java:198)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
       at java.lang.Thread.run(Thread.java:761)`


Caused by com.amazonaws.AmazonClientException: Unable to execute HTTP request: Unable to resolve host "cognito-identity.us-east-1.amazonaws.com": No address associated with hostname
       at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:441)
       at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212)
       at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:566)
       at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getCredentialsForIdentity(AmazonCognitoIdentityClient.java:389)
       at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:782)
       at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:694)
       at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:465)
       at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:485)
       at com.amazonaws.mobile.client.AWSMobileClient.getCredentials(AWSMobileClient.java:259)
       at com.amazonaws.services.pinpoint.AmazonPinpointClient.invoke(AmazonPinpointClient.java:3872)
       at com.amazonaws.services.pinpoint.AmazonPinpointClient.updateEndpoint(AmazonPinpointClient.java:3630)
       at com.amazonaws.mobileconnectors.pinpoint.targeting.TargetingClient$1.run(TargetingClient.java:198)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
       at java.lang.Thread.run(Thread.java:761)`

Caused by java.net.UnknownHostException: Unable to resolve host "cognito-identity.us-east-1.amazonaws.com": No address associated with hostname
       at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:95)
       at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
       at java.net.InetAddress.getAllByName(InetAddress.java:752)
       at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
       at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:187)
       at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:156)
       at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:98)
       at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:345)
       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:328)
       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
       at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:257)
       at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getOutputStream(DelegatingHttpsURLConnection.java:218)
       at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java)
       at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:162)
       at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:75)
       at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:371)
       at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:212)
       at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.invoke(AmazonCognitoIdentityClient.java:566)
       at com.amazonaws.services.cognitoidentity.AmazonCognitoIdentityClient.getCredentialsForIdentity(AmazonCognitoIdentityClient.java:389)
       at com.amazonaws.auth.CognitoCredentialsProvider.populateCredentialsWithCognito(CognitoCredentialsProvider.java:782)
       at com.amazonaws.auth.CognitoCredentialsProvider.startSession(CognitoCredentialsProvider.java:694)
       at com.amazonaws.auth.CognitoCredentialsProvider.getCredentials(CognitoCredentialsProvider.java:465)
       at com.amazonaws.auth.CognitoCachingCredentialsProvider.getCredentials(CognitoCachingCredentialsProvider.java:485)
       at com.amazonaws.mobile.client.AWSMobileClient.getCredentials(AWSMobileClient.java:259)
       at com.amazonaws.services.pinpoint.AmazonPinpointClient.invoke(AmazonPinpointClient.java:3872)
       at com.amazonaws.services.pinpoint.AmazonPinpointClient.updateEndpoint(AmazonPinpointClient.java:3630)
       at com.amazonaws.mobileconnectors.pinpoint.targeting.TargetingClient$1.run(TargetingClient.java:198)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
       at java.lang.Thread.run(Thread.java:761)

Which AWS service(s) are affected?
AWSPinpoint

Expected behavior
the app should not crash

Environment(please complete the following information):

  • SDK Version: 2.8.2

Device Information (please complete the following information):

  • Device: Tested with Nexus9 and OnePlus 5T
  • Android Version: 7.1 .1 and 8.1
AWSMobileClient Bug Needs Info from Requester Pinpoint

Most helpful comment

Hi @GiovanniVisentini and @baole, we're working on a fix for this issue.

All 10 comments

@GiovanniVisentini Sorry for the inconvenience caused. The SDK doesn't check for network connectivity. If the device is offline, AmazonClientException would be thrown. However, you can catch the exception or check for network connectivity from your app.

Hi Thanks for the answer,
I will try to check the connectivity, but please consider that:
1- in the release note of the v 2.8 you are mentioning the offline support: https://github.com/aws-amplify/aws-sdk-android/releases/tag/release_v2.8.0
2- the AmazonClientException is thrown inside a sdk thread, so I can't catch it.

Best Regards

@GiovanniVisentini Sorry for the inconvenience caused.

1) I will take this feedback to the team and I will post on this thread when I have a reply on the offline support that AWSMobileClient provides.

2) For the exception thrown from the background thread, we will address the issue by propagating the exception back to the app.

We have the same crash with 2.8.4

Hi @GiovanniVisentini and @baole, we're working on a fix for this issue.

@GiovanniVisentini @kvasukib
Since checking network availability before initialising Pinpoint doesn't completely fix the issue because network can be dropped while Pinpoint initialisation. Is there any workaround? Otherwise, we need to disable Pinpoint .

Experiencing the same crash here. It's causing a 4% crash rate on our users. Would be great to have this fixed as soon as possible. Please let us know.

@GiovanniVisentini @baole @gokeji ,

Please see if SDK release 2.9.1 fixes this issue for you. We have modified AWSMobileCient so that the Pinpoint client should be able to handle the exception.

You may see all changes in the changelog

Thanks. It works perfectly on our test devices. I will re-enable it in our production app and see if it fixes.

@baole, thank you for confirming. I鈥檒l go ahead and close the issue then.

Was this page helpful?
0 / 5 - 0 ratings