SUSI skills are having a very nice feedback system that allows the user to rate skills from 1-star to 5-star and showing ratings in skills screens. SUSI also allow the user to post feedback about skills and display them. You can check out how posting feedback implemented here and how displaying feedback feature implemented here. To enhance the user experience, we are adding user gravatar in the feedback section and to respect user privacy, we are anonymizing the user email displayed in the feedback section. In this post, we will see how these features implemented in SUSI iOS.
Integrating Gravatar –
We are showing gravatar of the user before feedback. Gravatar is a service for providing globally-unique avatars. We are using user email address to get the gravatar. The most basic gravatar image request URL looks like this:
https://www.gravatar.com/avatar/HASH
where HASH is replaced with the calculated hash for the specific email address we are requesting. We are using the MD5 hash function to hash the user’s email address.
The MD5 hashing algorithm is a one-way cryptographic function that accepts a message of any length as input and returns as output a fixed-length digest value to be used for authenticating the original message.
In SUSI iOS, we have MD5Digest.swift
file that gives the hash value of email string. We are using the following method to set gravatar:
if let userEmail = feedback?.email { setGravatar(from: userEmail) }
func setGravatar(from emailString: String) { let baseGravatarURL = "https://www.gravatar.com/avatar/" let emailMD5 = emailString.utf8.md5.rawValue let imageString = baseGravatarURL + emailMD5 + ".jpg" let imageURL = URL(string: imageString) gravatarImageView.kf.setImage(with: imageURL) }
Anonymizing User’s Email Address –
Before the implementation of this feature, the user’s full email address was displayed in the feedback section and see all review screen. To respect the privacy of the user, we are now only showing user email until the `@` sign.
In Feedback object, we have the email address string that we modify to show until `@` sign by following way:
if let userEmail = feedback?.email, let emailIndex = userEmail.range(of: "@")?.upperBound { userEmailLabel.text = String(userEmail.prefix(upTo: emailIndex)) + "..." }
Final Output –
Resources –