Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First explainer draft for Contacts Share API #844

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

diekus
Copy link
Member

@diekus diekus commented Jul 22, 2024

Creates the folder in MSEdge Explainers that hosts the Contacts Share API.

@diekus diekus changed the title Luigonza contacts share First explainer draft for Contacts Share API Jul 22, 2024

* `id`: unique id for the contact.
* `firstName`: Contact's first name(s).
* `displayPicture`: url to the display picture of the contact.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For versatility (and consistency with the ContactInfo object) what about a Blob instead of a url?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that was a consideration I thought about. I left it as url thinking in having a blob url with the image. I will explicitly call out the blob part in the explainer.

* `firstName`: Contact's first name(s).
* `displayPicture`: url to the display picture of the contact.
* `lastName`: Contact's last name(s).
* `rank`: integer that defines the rank or precedence that a contact has in the list. This could be used by the platform to display top contacts first.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reading the Windows API I see they expose a 'rank' field much like this, but the Android equivalent takes a simpler approach of requiring the provided list of contacts to be ordered in terms of rank (without there being an explicit rank field). Though it's not called out, I expect the Windows side may also give preference to the first provided contact over the last provided contact (when no rank is specified).

What about starting with the simpler approach of just declaring the Contacts list as ordered by rank, and then in the future if a need for more complex ranking arises (e.g. 2 contacts sharing a rank, or bigger gaps in rank), the API can be expanded to take an optional 'rank'.

#### Contact detailed fields

* `id`: unique id for the contact.
* `firstName`: Contact's first name(s).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A firstName/lastName split only makes sense in some parts of the world, so typically we try for more generic options. What about starting with only a required 'name' field, and then additional optional variants could be added in the future if needed.

For some context to reference:
The existing Contact web standard, simply has a 'Name' field.
https://w3c.github.io/contact-picker/#contacts-manager

The Android equivalent of this API uses a ShortLabel and LongLabel.
https://developer.android.com/training/sharing/direct-share-targets

The Windows version supports FirstName and LastName, but also supports DisplayName(Override), HonorificNamePrefix/Suffix, MiddleName, Name, Nickname, YomiFamilyName, and YomiGivenName (and a slew of accessors for having the OS smartly select and combine these for you).
https://learn.microsoft.com/en-us/uwp/api/windows.applicationmodel.contacts.contact?view=winrt-26100

* `displayPicture`: url to the display picture of the contact.
* `lastName`: Contact's last name(s).
* `rank`: integer that defines the rank or precedence that a contact has in the list. This could be used by the platform to display top contacts first.
* `phones`: list of strings that represent phone numbers.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For consistency with the ContactInfo object, what about 'tels'. Or maybe naming these singularly, and simply accepting a list?
'tel'
'email'


### Registering the Contact as a share target for the installed app

TODO: investigate how this works on the native side
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Based on the Windows and Android versions, it seems like the appropriate approach would be a new ShareTargetParams member. Potentially contacts as an array of contact IDs?

https://w3c.github.io/web-share-target/#sharetargetparams-and-its-members

ShareContacts/explainer.md Outdated Show resolved Hide resolved
ShareContacts/explainer.md Outdated Show resolved Hide resolved
diekus and others added 2 commits July 24, 2024 16:44
typo fix. thanks Thomas!

Co-authored-by: Thomas Steiner <[email protected]>
typo fix. thanks Thomas!

Co-authored-by: Thomas Steiner <[email protected]>

## Introduction

For modern web applications like social networks and instant messaging, contacts are a fundamental part of the app itself. These contacts are specfic to the application, but the platform/OS can benefit from exposing them in different people related surfaces. Contact Sharing for installed web applications allows web apps to surface contacts in relevant UX on the underlying OS. One example can be sharing. Different platforms have different share UX, and some of these UXs include a list of frequent contacts that make sharing content faster with people the user interacts with frequently.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be great to include some of the thoughts on other non-share ways these contacts will be leveraged to see how well this API design will meet those needs. In particular I'm wondering about how an app should be indicating it supports (or doesn't support) a particular way for this information to be leveraged. (e.g. Should including a telephone number implicitly mean this app supports making phone calls to it? What about supporting making phone calls, but not supporting as a Share target, because you're only a Phone app? etc.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants