started a topic on Tue, 15 September 2015 at 12:34 AM
I'd like to request a messaging feature. I've asked about the best way to implement this currently in this thread, and the given proposal about each user having their own shared group used for messaging is heavily lacking, currently you can't have messaging if the players aren't friends with one another (both ways), and you can't even check if this is true because you can't know if the friendship is bidirectional.
Proposal #1 - ListSharedGroups
One way to implement messaging based on the given proposal is to implement the call to retrieve all the shared groups a user is in. That way when you add a friend, you can add him to your private shared group, he will know he's in a group and he can check for messages you exchange messages via the groups data.
I think this call is mandatory (independent of the messaging system), because when a user gets added to a group he doesn't know what group he's been added to, and there is no way of knowing. Also, without messaging, a scenario where a user requests to join a group is very complicated.
Proposal #2 - ListSharedGroups via GetUserCombinedInfo
Same as the above, but the shared groups list can also be retrieved via the GetCombinedInfo.
Proposal #3 - Shared Groups Join Permissions
Add join permissions to shared groups. A shared group can be open or closed - if the group is open, anyone can join the group via a AddSharedGroupMembers call. A closed group works as it works now - only group members can add other users. That way users can invite themselves to another users group.
Proposal #4 - Player Messaging System
Previous proposals are all complicated on the client side - the client has to have a message format which includes the sender, timestamp and body. When checking for new messages he needs to check all the groups he's in for messages directed to him, aggregate those messages into conversations and sort them by timestamp. Also a lot of little nuances dealing with concurrency (more users writing data under the same key). Also when adding and removing friends you have to manage your membership in your private group and the friends groups. This comes down that checking for new messages, friending and unfriending are costly operations taking more than a few API calls.
Also there is the question of privacy. Since everyone can read the users messages when he's in their group, there is no privacy at all. Every friend can read all messages in your private group.
I'd be happy with proposals 1-3 for the time being, but a lot of PlayFab features are very hard to implement reasonably without some sort of messaging system, or your own backend (which is why I came here, so I didn't have to write my own).
So I propose a new Player Messaging feature that can check whether you have new messages after a certain timestamp in one API call, and can retrieve messages sent and received (since a timestamp) by the local user. A message should have the sender and the reciever PlayFabId's, timestamp when it was sent and it's body.