It makes it consistent in a way that we did not want to have. We wanted to use arrays for APNS and FCM instead of going string->array->string->array throughout the code
That's a different flow :)
The payload passed here is the actual payload, not some abstraction. It's supposed to be the value we used in the dispatcher for $this->http->post() (in the case of JPush), for potential logging purposes.
The flow you mean is when we pass the payload objects to the push() method of the dispatcher. That should indeed not be a string.