public void CommitUpdate(ISavedGameMetadata metadata, SavedGameMetadataUpdate updateForMetadata,
                                 byte[] updatedBinaryData, Action <SavedGameRequestStatus, ISavedGameMetadata> callback)
        {
            Misc.CheckNotNull(metadata);
            Misc.CheckNotNull(updatedBinaryData);
            Misc.CheckNotNull(callback);

            callback = ToOnGameThread(callback);

            NativeSnapshotMetadata convertedMetadata = metadata as NativeSnapshotMetadata;

            if (convertedMetadata == null)
            {
                Logger.e("Encountered metadata that was not generated by this ISavedGameClient");
                callback(SavedGameRequestStatus.BadInputError, null);
                return;
            }

            if (!convertedMetadata.IsOpen)
            {
                Logger.e("This method requires an open ISavedGameMetadata.");
                callback(SavedGameRequestStatus.BadInputError, null);
                return;
            }

            mSnapshotManager.Commit(convertedMetadata,
                                    AsMetadataChange(updateForMetadata),
                                    updatedBinaryData,
                                    response =>
            {
                if (!response.RequestSucceeded())
                {
                    callback(AsRequestStatus(response.ResponseStatus()), null);
                }
                else
                {
                    callback(SavedGameRequestStatus.Success, response.Data());
                }
            }
                                    );
        }