- Update README.md (#423)
- update-rexml (#426)
- update rexml (#427)
- Pass authorization details in headers instead of query parameters (#428)
See all changes between 3.4.1 and 3.4.2
- Pin GitHub Actions by commit-hash (#418)
- Update Node Version for Codegen (#420)
- Update release_pr.yml (#421)
See all changes between 3.4.0 and 3.4.1
- Add support for Gradle 8 (#411)
- Add guidance with links to use Amplify over AppSync SDK (#402)
See all changes between 3.3.2 and 3.4.0
- rotate travis creds (#390)
- Create notify_comments.yml (#392)
- Fix duplicate Nullable annotation (#397)
See all changes between 3.3.1 and 3.3.2
- re-encrypt config file (#384)
- Chore/Adding codeowners to the appsync repo (#388)
- Add checks to prevent re-initialization of the connectivitywatcher and unregistering before registering the same watcher to prevent too many requests to networkcallback registration (#387)
See all changes between 3.3.0 and 3.3.1
- port custom domain support. (#379)
- Chore: rotate travisCI creds (#378)
See all changes between 3.2.1 and 3.3.0
- Update README.md
- Add support for Gradle 7 projects (#361)
- Migrate project to AndroidX libraries (#362)
- Add support for Gradle 7 projects (#372)
See all changes between 3.2.0 and 3.2.1
- add support for AWS_LAMBDA auth mode (#358)
See all changes between 3.1.4 and 3.2.0
- retry interceptor now closes previous response (#332)
- use HTTPS endpoint for Github repo (#337)
- Adding release automation workflow and scripts (#336)
See all changes between 3.1.3 and 3.1.4
- Fixes issue 292.
- Fixes issue 306.
- Updates the Gradle Plugin so that it can be used with Android Studio 4.0.0+. Fixes incompatibilities with Gradle 6+.
- Added fix to preserve null list items when parsing the response. See issue #156 for details.
-
Added support for connecting to AWS AppSync using pure WebSockets for GraphQL subscriptions.
- Selection set filtering will be done per client as each client can define their own selection set.
In this case the subscription selection set must be a subset of the mutation selection set. For example,
a subscription
addedPost{author title}
linked to the mutationaddPost(...){id author title url version}
would receive only the author and the title of the post and none of the other fields. However, if the mutation didn't have the author in its selection set the subscriber would get anull
value for the author field (or an error in case the author field is defined as required/not-null in the schema). - In the earlier SDK version, if you didn’t configure the associated subscription selection set with the required fields
and relied on the mutation fields to push data to subscribed client, the behavior will change when you move to this version
that use pure WebSockets. In the example above, a subscription without the "author" field defined in its selection set would still return the author name with MQTT over WebSockets as the field is defined in the mutation, the same behavior won’t apply for pure WebSockets. The subscription selection set is essential when using pure WebSockets: if a field is not explicitly defined in the subscription it won't be returned by AWS AppSync.
- Selection set filtering will be done per client as each client can define their own selection set.
In this case the subscription selection set must be a subset of the mutation selection set. For example,
a subscription
-
Adopted Semantic versioning
- Starting with version 3.0.0 AppSync AWS Android SDK will follow sematic versioning.
AWSAppSync
now depends onAWSCore
version2.16.3
instead of2.16.1
.
- Make
GraphQLStoreOperation.Callback
a public interface, so theAWSAppSyncStore
asyncrhonous operations can be passed with a callback. Thanks @cjami for the contribution. See PR #193 for details.
AWSAppSync
now depends onAWSCore
version2.16.1
instead of2.13.5
.
- If an App Sync subscription attempts to be executed while in a non-Idle state, it will now pass the error back through the callback vs. crashing the app with a runtime exception. See issue#202
- Add new validations in
AWSAppSyncClient.Builder
.- Throw
RuntimeException
when Android context passed in is null. - Throw
RuntimException
when there is no validAuthMode
object passed in.
- Throw
AWSAppSync
now depends onAWSCore
version2.13.5
instead of2.13.4
.
- Support multiple authorization modes for a single AWS AppSync GraphQL endpoint.
- Introduced
clientDatabasePrefix(String)
that accepts a prefix that will be used in the construction of database name for caching query responses, offline mutations and subscriptions metadata. The usage of the prefix can be enabled by the flaguseClientDatabasePrefix(true)
. When the prefix is used, the name of the database would look as follows:
Purpose of cache | No prefix | Valid prefix |
---|---|---|
Query responses | appsyncstore |
<ClientDatabasePrefix>_appsyncstore |
Offline Mutations | appsyncstore_mutation |
<ClientDatabasePrefix>_appsyncstore_mutation |
Subscriptions metadata for Delta Sync | appsync_deltasync_db |
<ClientDatabasePrefix>_appsync_deltasync_db |
-
The
ClientDatabasePrefix
can be passed viaawsconfiguration.json
that is generated from the AWS AppSync Console and Amplify CLI."AppSync": { "Default": { "ApiUrl": "https://xyz.appsync-api.us-east-2.amazonaws.com/graphql", "Region": "us-east-2", "AuthMode": "API_KEY", "ApiKey": "da2-xyz", "ClientDatabasePrefix": "MyAppSyncAPIName_API_KEY" } }
The
AWSAppSyncClient
object can be constructed as follows:AWSAppSyncClient awsAppSyncClient = AWSAppSyncClient.builder() .awsConfiguration(awsConfiguration) .useClientDatabasePrefix(true) .build();
-
Alternatively, the
ClientDatabasePrefix
can be passed via theAWSAppSyncClient.Builder
.AWSAppSyncClient awsAppSyncClient = AWSAppSyncClient.builder() .context(getApplicationContext()) .apiKey(new BasicAPIKeyAuthProvider("da2-apiKey")) .serverUrl(serverUrl) .region(region) .useClientDatabasePrefix(true) .clientDatabasePrefix("MyAppSyncAPIName_API_KEY") .build();
AWSAppSync
now depends onAWSCore
version2.13.4
instead of2.13.2
.
- Fixed a bug with inconsistent capitalization of class names in generated code that represent GraphQL input types. See PR #150 for details.
- Fixed a bug with inconsistent capitalization of variables in generated code that represent fields for GraphQL types. See PR #172 for details.
- AWS AppSync plugin for gradle is now compatible with Gradle version 5.x. See issue#91 for details.
- This release adds back the public methods namely, cacheKey and CacheFieldValueResolver that were removed as part of release 2.8.0. These methods have been deprecated and will be removed in the next minor version.
- All the GraphQL input types now derive from the base class InputType. cacheKey method from ResponseField is no longer used to compute the cache key and is being deleted. CacheFieldValueResolver now accepts an instance of CacheKeyBuilder which is used to compute cache keys instead of the cacheKey method. See issue #103
- Fixed a bug that cause
NullPointerException
in theApolloServerInterceptor
. See PR #146 Thanks @alanvan0502 ! - Sanitized useragent string of unicode characters that caused requests to fail. The unicode characters in this case came from the platform name (TM) symbol. See PR #146 Thanks @alanvan0502 !
AWSAppSync
now depends onAWSCore
version2.13.2
instead of2.13.0
.
- Fixed a bug that caused cursors to remain open in certain scenarios. See PR #141 Thanks @alanvan0502 ! See issue #140
AWSAppSync
now depends onAWSCore
version2.13.0
instead of2.12.1
.
AWSAppSync
now depends onAWSCore
version2.12.1
instead of2.11.0
.
- Adjusted network connectivity check in mutation processing logic. See issue #108, issue #121
- Fixed
NoSuchElementException
in Subscription Reconnection logic. See issue #114.
- Fixed a memory leak in
subscriptionsById
map. See issue #111. - Prevent a NPE on the
userCallback
when canceling a subscription. See issue #114.
AWSAppSync
now depends onAWSCore
version2.11.0
instead of2.10.1
.- Added support to check if mutation queue is empty and to clear mutation queue. See issue #96, and issue #101
- Fixed bug in
mutationQueueExecutionTimeout
method. See issue #105 - Fixed bug in mutation processing logic to handle case where cancel is called in the mutation callback. See issue #102
AWSAppSync
now depends onAWSCore
version2.10.1
instead of2.10.0
.
- Added logic to mutation queue processing to handle canceled mutations.
AWSAppSync
now depends onAWSCore
version2.10.0
instead of2.9.1
.- Added
mutationQueueExecutionTimeout
method to AppSyncClient Builder to specify execution timeout for mutations.
- Added
subscriptionsAutoReconnect
method to AppSyncClient Builder to enable/disable subscription auto reconnect.
- Fixed bug in Complex Objects logic. See issue #11
- Fixed connection tracking bug in unsubscribe logic
- Improved Subscription Connection handling by optimizing MQTT connections
- Moved subscription setup and cancel requests to a separate thread to avoid blocking the calling thread
AWSAppSync
now depends onAWSCore
version2.9.1
instead of2.8.2
.
- Adjusted mutation processing logic to remove mutations from the queue only after they have been processed by the server and maintain sequential execution semantics. See issue #40, issue #33, issue #72, and issue #82
- Added support for Delta Sync Feature Delta Sync allows you to perform automatic synchronization with an AWS AppSync GraphQL server. The client will perform reconnection, exponential backoff, and retries when network errors take place for simplified data replication to devices. For more details, please refer documentation.
- Added reconnection logic to subscriptions. Subscriptions will be automatically reconnected if the device loses connectivity temporarily or transitions between networks. See issue #45
- Fixed bug in connection logic to close MQTT connection if all subscriptions are cancelled. See issue #7
AWSAppSync
now depends onAWSCore
version2.8.0
instead of2.7.7
.
- Fixed bug in subscribe call that was setting the QoS to be 0. It is now correctly set to QoS 1. See issue #54
- Fixed bug that was causing a ConcurrentModificationException in the logic to handle connection loss. See PR #41 and issue #53
- Fixed null pointer exception in the AppSyncOfflineMutationInterceptor. See issue #51
- Allow multiple active subscriptions while using API_KEY auth.
- Adjusted logic for service call retries. Retries will have adjusted Jitter logic and calls will be retried until max exponential backoff time has been reached.
- Fixed connection handling bug that was causing unexpected disconnects. See issue #22
- Add support for
AWSConfiguration
throughawsconfiguration.json
inAWSAppSyncClient
.
- Fix a bug where multiple instances of same subscriptions when cancelled cause a
ConcurrentModificationException
. See issue #22
- Add retries for service calls with error code 5XX and 429. GraphQL calls for mutation, query, and subscription will be retried. This does not include retrying the connection for subscription messages.
- Adds support for AWS AppSync Defined Scalars such as
AWSTimestamp
.
- Fix premature execution of
onCompleted
method ofAppSyncSubscriptionCall.Callback
.
- Call
onCompleted
method ofAppSyncSubscriptionCall.Callback
when a subscription is disconnected. - Remove static references to context. See issue #13
- Prevent crashing when retrieving credentials to sign AppSync requests. Errors will now be routed to the
onError
callback. See issue #16 - Remove references to subscription callback when subscription is cancelled. See issue #13
- Lazy load token in
BasicCognitoUserPoolsAuthProvider
.
- Improve dependency injection for gradle plugin.
Uses
implementation
instead ofcompile
when using higher than gradle version 2. Note: gradle version 0 and 1 are note supported. - Improve
BasicCognitoUserPoolsAuthProvider
retrieval of token.
- Fixed dependency
com.moowork.gradle:gradle-node-plugin:1.0.0
in gradle plugin
- Adds OpenID Connect (OIDC) support as an authorization option.
- Improve synchronization of shared data structures in multiple subscriptions.
- Fixed bug that caused sigv4 signing not to be attached when okhttp client was specified in builder. See PR #4
- Subscription support.
- Complex objects allow fields to be S3 objects.
- Conflict resolution surfaces mutation conflicts so that they can be resolved through a callback.
- Initial release with support for Cognito UserPools, Cognito Identity, and API key based authentication.
- Optimistic updates allow the cache to be updated before a server response is received (i.e. slow network or offline)
- Offline mutation allows mutations to be queued while client is offline until online again.