No, the platforms don’t have to create identical revision IDs. (They’re all different from CouchDB, which IIRC uses an MD-5 of the serialization of the Erlang object.) The only thing that’s required is that different revisions have different revision IDs. It’s helpful if two clients create the same revID for an identical change, because it eliminates a no-op conflict, but it’s not required.
Sounds like a Java bug that it doesn’t include the previous revision string. The Objective-C version does include the attachments, because at that point they’re in the JSON as an _attachments object.