Registering and posting Facebook achievements from an iOS app - ios

I have an existing iOS app on the App Store that includes Game Center achievements. Since it also has a working Facebook Connect implementation, I'd like to leverage the social channels available through the new Achievements Graph APIs with my apps.
I have created the corresponding achievement pages ready to be registered with Facebook as achievements for my app. From what I have read, since the app auth token has to be used to submit achievements and scores, I'm doing all of this on my server using some PHP scripts so I don't have to ship my secret key with my app binaries. I'm planning to have my iOS app call a script on my server when submitting achievements or scores.
I am using the same FB app that I use for the native iOS app. Obviously I want it to start generating stories and timeline events when the user unlocks achievements or reaches a new high score.
However I am running into a big stumbling block when trying to register the achievements for the FB app. I get the following error with the script that does the registration :
OAuthException: (#15) This method is not supported for native apps
I seem to be doing everything right, sending a POST to the /<appid>/achievements API with the URL for the achievements, etc.
In an effort to work around limitations on these API by Facebook, I have also enabled the existing mobile app to also be a "Website" and "App on Facebook" in the developer settings. To no avail.
So my question is... am I missing something to enable achievements that could be submitted from an iOS app through an intermediary server? I don't mind setting up canvas pages and so on if necessary, but I'd rather not have the users re-authenticate as a wholly separate app just so they can post achievements and scores to their Facebook stream.
What I'm trying to achieve is at most ask the user for additional permissions on the existing app on their devices, if necessary. It should be possible to invoke a script on my server that will push the achievements to Facebook when needed - but how ?
Is the only way to do this to use a separate FB app that is not set as a native mobile app at all, or can it be a combination native/Web app?

It means you've probably configured your application on Facebook's side as 'Native/Desktop' instead of 'web'.
In this configuration your app secret is untrusted because it's assumed you've shipped it with the client code - there's no reason your IOS app won't work in 'web' mode, so use that instead
(I'm assuming you haven't actually shipped your app secret in client code - if you have, it's a huge security problem unless your app is set to 'Native/Desktop')

Related

IOS Deeplinking- Pass msg from email to your app

Existing user of the app will send email to other user.
Other user may have app installed or not installed on their device.
The email will contain some token. Now I want to pass that token to my app. I have read that by deep-linking, its possible. But how will I handle the case when other user have not installed my app yet in their IOS device.
Any help is appreciated.
What you're describing is called Deferred Deep Linking (Deep Linking refers to using a link to open your app, even directly to a specific piece of content, and Deferred means that it works even if the app isn't installed first).
Unfortunately there's no native way to accomplish this yet on either iOS or Android. URL schemes don't work, because they always fail if the app isn't installed. Apple's new Universal Links in iOS 9 get closer, but you'd still have to handle redirecting the user from your website to the App Store
A free service like Branch.io (full disclosure: they're so awesome I work with them) can handle all of this for you though. Here's the docs page covering exactly how to create email links like you described: https://docs.branch.io/pages/emails/email-partners-list/

Where to save Game Scores, Last Level Passed, etc.? Parse(Cloud backend) or Facebook?

noob to iOS and Game Dev
I am writing a simple game which has incremental levels (flow chart below). Only thing that I want to do it save information like "Last level passed" on to the cloud.
I would like it so that whether the user signs in to my app from iOS, Android, Web (I'm starting off with iOS app only) - always goes back to the right level.
My fundamental architecture question - should I saving this information in somewhere on Facebook API/SDK or in my own Cloud Backend? (I'm using Parse as my backend)
I would save it into Parse so that you are not tied to Facebook for your users. I know many people do not want to connect their Facebook accounts to apps, etc. so this way you can have one solution for everyone.
Also, by using your own backend you can use Facebook a way for users to log in and then later allow them to log in via twitter, etc. and your game would still work as it should regardless of how the user chose to create an account.

Facebook App Requests aren't shown on iOS devices?

I've sent an app invitation from an iPad app to a test Facebook account via Facebook's API. When I login to the test account on my PC, the app request is there.
When I login to the test account on my iPad (either via Safari or via the Facebook App), I can see the number "1" next to the App Centre tab, but when I click it and go to the App Centre, there's no request. In fact, I can't see any App Centre areas dedicated to requests on Facebook for iOS - there's only Social Picks and Top Apps. Any explanation for this?
This is caused by an incorrect configuration on the Facebook app setting page. When you are setting up the app, you need to make sure the following is set correctly.
Go to developers.facebook.com then select "Apps". Edit your app and fill in the following..
iOS App Bundle (dont think it's essential but fill it in, this the bundle id from Xcode (com.companyname.appname))
iPhone/iPad App Store ID - This is ESSENTIAL, one of these must be filled in with a valid app store ID. You get this when you create an app with iTunes Connect. If you create an app, and fill in the details right up to the point where it asks you to submit the binary, it will generate what Apple refers to as an Apple ID (or iTunes Id?). It's just a long integer value. It doesn't have to be for the corresponding app, if you already have apps in the app store just log in to iTunes connect and use an existing one for testing.
Configured for iOS SSO - Enabled
Configured for Deep Linking - Enabled
The only functionality you get from Facebook when a user clicks an app notification on iOS is the user being redirected to the app, if installed, or to the App Store if not. Also if you want your app notifications to show up on desktop, you'll need a Canvas URL under the "App On Facebook" section.
In my tests I had to have a canvas URL to get iOS notifications working, but I'm not sure if this is a bug with Facebook or intended behaviour, so if it doesn't work with just iOS enabled, enable app on Facebook too and stick in a random url if you don't have one.
I just figured there can be another reason for this symptom: if your app has location restriction (only available in certain countries), the user who receives the request has to be in that country (e.g. I had to connect with mine via GeoEdge).

Is it possible to use the Scores & Achievements API from Facebook solely from a native mobile application?

I'm toying around with the Facebook APIs for a game I'm developing as a hobby project, after reading through the facebook SDK documentation, I'm still a little unclear as to what is required for developing games on the platform.
This is what I have :
Native iOS application
All game data is stored locally (levels, characters, items)
I don't have any backend servers, the game is completely client side
only.
I want to make the game "social" by adding achievements/friends lists, the facebook API seems like a good candidate for doing so
This is what I'm trying to achieve :
SSO - Hoping to make use of the facebook SSO for accounts so I don't
have to implement my own authentication etc. This saves time in not having to develop it myself.
Scores - when a particular event happens in my game it will award
some points to the user, I'm looking to use the scores API for
this.
Achievements - after the user has earned a certain amount of points,
or another predefined event has occurred, an achievement will be
granted, using the achievements API.
Question : Can I use the scores and achievements APIs from facebook without having my game deployed onto a backend server?
No, two reasons:
You need a URL to host the metadata for your achievements
The scores and achievements need to be posted using the App Access Token, and distributing that in your client app would allow anyone decompiling the app to change any of your app's settings, make posts on behalf of any of the app's users, redirect your traffic to another site, etc.
At the least, you need static pages describing the achievements, and a callback script you can hit from your mobile app which triggers the publishing to Facebook of the Scores and Achievements
Update 2012-09-06: it's no longer necessary to use the app access token to post scores and achievements, so you could use scores in a mobile app, but you still need a website to hold the achievement metadata
I found a good answer for this recently.
There's no point in duplicating, so please see the answer here:
Using Facebook Achievement API in Android
(It is relevant for iOS as well as any other platform)

iOS >> Ads Conversion Link: Is there a way to "catch" from which site / banner / ad users got to my app in the App Store?

I did some ads to my apps; the only information I get regarding how many people got to my app is from the sites where I advertised (Google, Facebook, etc...); and this is only showing how many people clicked the link.
I want info about the following:
How many people got to my app page - per each ad that I have
How many people downloaded the app - per each ad that I have
Can anyone assist?
What you are talking about is conversion tracking.
There's no easy way because you don't get stats from the app store page itself, so you have to do it like this:
when the user clicks your banner, record their device IP address in your database.
when they launch your app on their iPhone for the first time, make a call to your website using native code in your app and log the IP address again. If you get a match then you'll know that the user who clicked the banner is the same one who launched the app, therefore they must have just downloaded it from the app store.
It's not perfect because it won't work if there's a long time between them downloading and first launching the app (assuming they don't have a static IP), or if they download the app on a PC and then install it via iTunes later. It should work in a lot of cases though.
Some of the standard analytics packages have this capability already, for example Google/Admob supports tracking a user from clicking an Admob ad to launching the app in this way (Assuming you are using Google analytics in your app):
http://support.google.com/admob/bin/answer.py?hl=en&answer=1704628

Resources