Facebook app: Choosing an alternate app at install time - facebook

We (will) have two Facebook apps for our company. Some of our users will be eligible for one, some for the other. This is a disjoint set, no users will be eligible for both apps. What we'd like to do is detect during the login/install process that a user has chosen the wrong app, and redirect them to the correct app
Is this possible within the Facebook framework?

No, this functionality does not exist within the Facebook framework. You will have to use your own custom script to decide which app to direct them to.

Some of our users will be eligible for one, some for the other. This is a disjoint set, no users will be eligible for both apps.
Define “eligible” in this context, please.
What we'd like to do is detect during the login/install process that a user has chosen the wrong app, and redirect them to the correct app
And define what you would want to base that decision on at that point too, please.
Apart from the unclear question, one app could still do different things for different users, and could make the decision to categorize which user how based on all the data available to that app.

Related

Facebook connect service for my customers without appid

I have more than few clients that would like to add facebook connect to their landing pages (managed by me). They are too many and not enough tech-savvy to manually create ad appid for each of them.
So my only solution is to usa my own appid to add facebook connect to all my clients websites, but as far as I know, Facebook doesn't allow to simply use the same appid on any domain.
How can I solve this? I can't find any documentation to solve my issue. Does anyone have a direction for me?
This has been discussed a couple o’ times before already – but I mostly commented on earlier questions, so let me write the whole thing up as a proper answer, for future reference.
[paraphrased] Multiple-client Facebook login via one single app id
Does anyone have a direction for me?
You probably rather don’t want to do that.
It is not really possible to run one simple app one multiple different domains.
As a workaround for only a few domains, people used to specify different domains for the different platforms – Website, Page Tab or Canvas App, plus Mobile alternative for Canvas – without actually using any of those platforms besides Website, which made the app usable on multiple domains as a website app. But since Facebook introduced their login/permission review process¹, you can’t do that any more – they expect you to present actual functionality on all platforms you have configured in your app.
You can kind-off use one single app for login on multiple domains – if you are willing to use only the server-side login flow, and to redirect users to one “main” domain (that gets specified as the app domain in the app settings) to login, and then from there back to the origin domain.
But this has several drawbacks:
It’s not what you’d call a “white label” solution. If your clients expect it to look as if users where logging in via “their” app, it should stay on their domain. Individual branding, in regard to stuff such as app name, app logo that shows in the login dialog, etc., would also not be possible. Additionally, app attribution – the link that shows up under content shared/posted via the app – would only link users back to the main domain, and not to your customer’s.
You would not be able to use the JS SDK for client-side API requests, or even just to embed it to render any of the FB social plugins that require an app id – the SDK checks what domain it is “running on”, and can not be tricked to accept a domain that is not specified in the app settings.
There could be privacy issues. An over-exaggerated example: Just because I as the app user decided to share my photos or videos I have on Facebook with your customer Our-Holy-Mother-of-Christ-Bakery.com, does not necessarily mean I want to share them with your other customer, amateurs-doing-all-kinds-of-nasty-stuff.xxx as well – but if they shared an app id for login purposes, I automatically would. Have fun writin’ the Privacy Policy (which is mandatory if you use FB login functionality, and FB also automatically checks if your app has got one) for that scenario ;-)
Finally, and most importantly: All your customers would be “sitting in the same boat.” If one of them, or in turn their website users, would publish spam via your app id, so that Facebook blocks it, login would not work any more for all of your customer’s websites. And if you decide only then, that setting up an individual app for each of your customers would be the better way to go, they would not be able to recognize their existing users any more, because of user ids being app-scoped since API v2.0 was introduced – so if users logged into this new app, that app would see a totally different user id. (And to rely on an email address as an identifier is risky, too, because you will not get one from the API for every user; for example if they registered using their mobile device.)
Edit: Plus, app/domain insights, as luschn mentioned in his answer.
¹ Yes, the review process has made it more laborious to set up multiple apps for multiple clients. But for apps that do the same stuff/use the same permissions in the same manner, you can refer to an earlier successfully reviewed app id to speed up the process a little. Also, screenshots of how f.e. posts made via the app look on timeline, and what UI components are used, as well as screencasts that you include in your submission could probably be used with little to no alteration.
Apps are not meant be used on several different domains, you will have to create a new App for each domain, i´m afraid. You can use the different platforms in the App settings to use different domains, but there are only a few so it´s pointless. Just create some screenshots and a tutorial for your clients, that´s how it is usually done.
Btw, it would be weird to authorize an App on a website, and the same App would allow you to be authorized on all other client websites. Also, insights are per App, so your clients may want to see their own insights and not the global insights of all domains together.
Many is not defined but i think for being a smart developer you need to create new app_ids for every project you need to use facebook connect. Just my opinion. It also allows you to monitor alot of stuff.

Creating a Facebook comment box for different sites

I want to add the facebook comment box to several websites for different people. IT asks for an Appid which at first I thought meant their Facebook Business page id. Now im realizing that I need to create a Facebook App for this. My question is this, can I create one app, take the ID and use that for several different comment boxes on various sites that are not related and owned by different clients? Or should I make new Apps for each one?
Thanks
The comment boxes are separated by the URL you define in the HTML attributes, so technically you can use the same App ID for multiple clients since the pages have different URLs.
Still - I would advise you to create a new application for each client. At some point one client might ask you to give them admin access to the Facebook application - and you don't want to give one client access to the application that also serves your other clients...

Authenticating an App for Multiple Domains

I've built a tiny FB app whose purpose is to get the user's public profile URL. I have used the client-side authentication example provided, and it works just fine. I have also setup an application on Facebook.com so I can provide an APP ID. For this use, I have left App Domains blank, and made the app the type "Website with Facebook Login". And then I supply the "Site URL", the callback.
My trouble is that my web application runs across multiple domains. Individual customers have their own unique subdomain on our main domain. Do I have to create a new application for every single subdomain? It appears that way now, which would lead to hundreds — possibly thousands — of applications just to get a working callback URL for every customer domain.
Is there an easier way to do this?
For this use, I have left App Domains blank
You might want to reconsider that; especially you might want to read the explanation text for “App Domain” parameter that hovering over the [?] shows …

apps.Facebook.com/XYZ vs. Facebook.com/XYZ/app_123456789

what's the difference between apps.Facebook and Facebook.com/COMPANY_NAME/app_1234567 ?
For example: http://www.facebook.com/AcademyofArtUniversity/app_307555419320340
I'm trying to build a similar contact form page for a client, but I when I create an app, I get apps.facebook.com/APP_NAME rather than the app name at the end. Is there a difference? Are these different types of apps, or is one just an older style name?
Bonus question: Why wouldn't Academy of Art (using the second step from their example above) request User permissions to pull in the Facebook Graph data rather than require users to re-enter it? Is this related to my question above? Is there a best practice around using Permissions vs. New Entry?
apps.facebook.com/[namespace] is the primary url to a Canvas app, while the latter, `www.facebook.com/[pagename]/app_[appid] is your app added to a page as a Page tab app.
For the second question, this app probably doesn't want to ask for permissions (perhaps to lower the friction) since only a few fields would actually be accesible via the graph.

How do you limit a Facebook app to a small number of people during testing?

I know about test accounts, but during beta I'd like to allow access only to my friends, and then later friends-of-friends, and then only eventually Kevin Bacon and his friends.
That would probably suck, wouldn't it? The app would be listed (is there a way to prevent listing?) and someone I don't know might try it and get a "sorry, this is in development message." I imagine they'd be irritated and not come back.
From what I've read, only a few apps take off, but when they take off, they REALLY take off. Do developers just release these things fully baked?
Anyone start out with OpenSocial or other smaller-than-Facebook networks?
Any ideas for a soft, gradual, restricted roll-out?
Once you've set up your application, there is a setting in the Developer application control panel for your app: Your app -> Advanced -> Sandbox Mode.
Sandbox mode lets you restrict access to only those people listed as developers (under the Basic section).
In terms of expanding the app, Facebook doesn't provide much more flexibility that the Sandbox mode. Unfortunately, adding everyone as Developers of the app doesn't work very well for a beta, as people can access the application control panel once they are a developer. I ended up putting a whitelist of Facebook Ids into the front controller of my application for a previous beta, and it worked fairly well.
The apps are only listed in the App Directory if you submit them and they are accepted. There's no issue about preventing listing, it's something you have to apply for.
As for restricting users, you can accomplish it with a script in the application that checks whether the currently logged-in user is within your restricted user set. For example, if you only want friends of yourself, check whether the current user is friends with your user id. If not, simply display an error/message page or redirect them to the Facebook home page (or wherever). Add this check to the rest of the start-up logic run each page (such as connecting to your DB and authenticating with Facebook).
What I have done in some cases is keep a database table with the user id's of users who are allowed access, essentially a "whitelist". If the user isn't in the table, redirect them.