na: release v0.28.0

Change-Id: I29ef5745266d91e65e7d8845ddbf9400e4bd49c1
Reviewed-on: https://code-review.googlesource.com/33071
Reviewed-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/CHANGES.md b/CHANGES.md
index d2ad079..30e26cd 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,32 @@
 # Changes
 
+## v0.28.0
+
+- bigtable:
+  - Emulator returns Unimplemented for snapshot RPCs.
+- bigquery:
+  - Support zero-length repeated, nested fields.
+- cloud assets:
+  - Add v1beta client.
+- datastore:
+  - Don't nil out transaction ID on retry.
+- firestore:
+  - BREAKING CHANGE: When watching a query with Query.Snapshots, QuerySnapshotIterator.Next
+  returns a QuerySnapshot which contains read time, result size, change list and the DocumentIterator
+  (previously, QuerySnapshotIterator.Next returned just the DocumentIterator). See: https://godoc.org/cloud.google.com/go/firestore#Query.Snapshots.
+  - Add array-contains operator.
+- IAM:
+  - Add iam/credentials/apiv1 client.
+- pubsub:
+  - Canceling the context passed to Subscription.Receive causes Receive to return when
+  processing finishes on all messages currently in progress, even if new messages are arriving.
+- redis:
+  - Add redis/apiv1 client.
+- storage:
+  - Add Reader.Attrs.
+  - Deprecate several Reader getter methods: please use Reader.Attrs for these instead.
+  - Add ObjectHandle.Bucket and ObjectHandle.Object methods.
+
 ## v0.27.0
 
 - bigquery: