0

My latest project has (had) a requirement for the user to invite their friends to their online service. I discovered that, apparently, as of April 2015 with the new v2.0+ Facebook Graph API, you cannot actually get a list of friends for the user, unless those friends are already subscribed members of your app.

The scenario:

My app is a web service that lets the user collaborate on research work in a private group online. The user needs to

  1. look up their list of friends,
  2. set permissions their friend will have in the group, and
  3. send them an invitation both join the service, and the specific group. (using a unique, one-time use link tied to each recipient)

The user would (ideally) receive an invitation with a specific link for them to not just become a subscriber of said online app, but specifically to join the group they were invited to (i.e. not just a generic "hey, check out this app" type of invitation).

The expectation:

The user doesn't care whether their friend is already a member of "MyApp.com". They expect to simply look up their friends just like they do today from their phone when they connect it to Facebook (makes all contacts available, regardless of whether those friends connected their Facebook to their phone, respectively). Likewise, compare inviting members to your Google docs, for example: look up your contact, set permission, send invite - so easy. Users demand this UX simplicity today and do not distinguish or care whether they are dealing with email, Facebook, Twitter contacts, whatever.

The problem:

The entire point of a social network is to be, well, social. If the Graph API only lets my app access friends that are ALREADY users of my app, it completely defeats the entire purpose - it cuts my user off at the knees, kills UX, no more ability to actually contact their own friends. My understanding is Facebook made this change to prevent developers from spamming users, and I get that, I completely support that. HOWEVER, my company and my app are not the ones that are trying to invite friends for it's own purposes, it is the USER and THEIR OWN friends that THEY have the right to access and converse with for their purposes (or so you'd think). Beyond just friends list, even if I had that, I think there are additional hurdles and limitations with posting messages to friends, even private (not wall) messages, which again would be anti-social.

The Question:

Am I understanding Facebook limitations properly, and if so, what is the work-around? I'd be ok with such an API being locked down until you pass a review that proves you aren't spamming users, but I did not see such an option.

Facebook supposedly prioritizes users over developers, and these changes were made because if the user is not comfortable with privacy (don't spam my friends), then they wont be users any longer, and that obviously affects developers and Facebook. OK, but did they not realize that by locking it down this extreme just killed UX for the user in legitimate scenarios? And to my original point, not just a little, but paramount - the result quite literally is that on April 30, 2015, Facebook became anti-social. Surely this is not inline with their mission. Surely there is a better approach.

dapug
  • 1,781
  • 4
  • 22
  • 28
  • 2
    Invite the user first. When the user joins notify the user that invited them that they join and tell him to set permissions – WizKid Sep 10 '15 at 04:09
  • How do I know what user to invite? My app and therefore my signed in user do not have access to user/friends. – dapug Sep 10 '15 at 05:26
  • 2
    That is answered in the FAQ at https://developers.facebook.com/docs/apps/faq#friend_invite – WizKid Sep 10 '15 at 05:39
  • I thought that was the way to go too, but digging through the docs a few days ago when researching this, I found: https://developers.facebook.com/docs/games/invitable-friends/v2.4 ("The invitable_friends API is only available for games that have a Facebook Canvas app implementation"). Such is not my case (external website). – dapug Sep 10 '15 at 07:35
  • 2
    But the link I gave you gives you other options if you are not a game – WizKid Sep 10 '15 at 13:46
  • Aside Facebook, had you considered use of contact importers, like [CloudSponge](https://cloudsponge.com)? – Rael Gugelmin Cunha Sep 14 '15 at 11:20
  • No, but CloudSponge looks awesome, thank you. Only problem is, they don't support Facebook, and I imagine this very reason I posted here is why. You can't tap into the Facebook users own contacts. It's maddening. Facebook is a requirement for my scenario. – dapug Sep 14 '15 at 15:23

2 Answers2

2

If your app is not a game (which I assume), the only viable option would be the Message Dialog as desribed at

If your app is not a game and has a mobile or web presence:

You can also use the Message Dialog on iOS and Android, or the Send Dialog on Web. These products let a person send a message directly to their friends containing a link to your app. This type of message is a great channel for communicating with a smaller number of people in a direct way. The Message Dialog and the Send Dialog both include a typeahead which lets the person easily select a number of friends to receive the invite.

Community
  • 1
  • 1
Tobi
  • 31,405
  • 8
  • 58
  • 90
  • Well, this is pretty close and might work if Send could be limited to a single friend (doesn't look possible). The reason is that to achieve the UX described above, a unique URL to my app could be sent (i think) so that when they sign in, I can retain the association back to that specific invitation. But this wont work if the unique link goes out to multiple people. I haven't tried the code yet, but the doc makes it sound like the user (not developer) decides how many recipients. – dapug Sep 10 '15 at 08:02
  • 1
    The user decides... Why don't you encode the sending user's id in the URL? That should work – Tobi Sep 10 '15 at 08:07
  • Ok, thank you. Similar to WizKid suggested (above). I can determine the user that invited them, but not who they actually are as they arrive. This is a different flow and UX than my requirements posted. Flow would have to be: 1) User finds and invites friends via Send dialog, 2) friend accepts and joins as a user of my app, 3) user get's notified that their friend joined, 4) user sets permission for this friend in their group. Not as graceful, but admittedly better than totally blocked. In fairness, rather than "anti-social" Facebook has only reduced to "tediously-social". :) – dapug Sep 10 '15 at 20:21
  • I've had a chance to whip up a POC to try this out in code. Unfortunately this is not a solution that will work. In my scenario, it is imperative that I know who the recipients are that were invited so that I can streamline the flow and UX, such is not possible. If I send a special link to unknown recipients, for security reasons I have to treat them as complete strangers (not associated with invitation) because I do know know whether that link was used by unintended people. Meaning, its only as good as nothing more than "hey, check out this app" type of invitation - not acceptable. – dapug Sep 12 '15 at 15:02
0

You might also find App Invites useful but I beleive it's only for iOS and Android apps and might not exactly fit your use case:

App Invites are a content-rich, personal way for people to invite their Facebook friends to a mobile app.

Matt Harley
  • 358
  • 2
  • 11