Today I successfully added support to Bamboo for Facebook’s nefarious new permissions model. This means that, for the very first time, iPhone application developers have real SDK support for Facebook’s new Graph API, without writing very low-level networking code and handling extremely confusing authorization and permissions.
Facebook has been threatening to shut down data access for all apps that do not migrate over to using the new model for some time now. The most recent deadline was June 1, and it has just moved back to June 30.
If your iPhone app publishes to the user’s stream, as is the case for 98% of iPhone apps, your app will break. You need to do something about it NOW, so that you are ready by June 30. And I am here to help you with that.
Enter Bamboo, a Facebook Graph API iPhone SDK.
First, some Facebook permissions details
Facebook’s fundamental permission concept has changed from a simple yes/no, either your app had permission to do everything or nothing, to a much more granular set of very specific abilities. There are currently 5 “publishing” (write) permission types, and a whopping 45 “data” permission types, broken down into personal data (25 types), and friends data (20 types). You can see the full list here.
For iPhone app developers who interface with Facebook, this means that if you do anything besides read the most basic of public data from a user’s profile, you must update your app with support for the new extended permissions.
So, how can Bamboo help me?
In one succinct line: Bamboo aims to meet all your Facebook needs as an iPhone application developer.
Bamboo is an objective-c implementation of the Facebook Graph API, including support for both the new oAuth authorization, and the new extended permissions model. For integration instructions and more technical details, please see the Bamboo github page.
For your convenience, here is a simple example of client code using Bamboo:
[[FacebookProxy instance] loginAndAuthorizeWithTarget:self callback:@selector(finishedAuthorizing)]; GraphAPI* graph = [[FacebookProxy instance] newGraph]; GraphObject* me = [graph getObject:@"me"]; NSString* myName = me.name; UIImage* myProfileImage = [me largePicture]; NSArray* thingsILike = [graph getConnections:@"likes" forObject:me.objectID]; // hello world post - update status message to my feed/wall NSDictionary* args = [NSDictionary dictionaryWithObjectsAndKeys: @"Hello World, from bamboo!", @"message", nil]; [self._graph putToObject:me.objectID connectionType:@"feed" args:args]; // comment on a post NSDictionary* args = [NSDictionary dictionaryWithObjectsAndKeys: @"Bamboo comment test", @"message", nil]; GraphObject* post_result = [self._graph putToObject:@"post_id" connectionType:@"comments" args:args]; // add a like connection from me to you [self._graph likeObject:@"your_id"]
Bamboo is designed to make the transition from using Facebook Connect to using Bamboo as simple, straightforward, and easy as possible. I have reused the login mechanism of Facebook Connect, and reused the same UI look and feel for the new extended permissions dialog, so your users will feel right at home with the new flow. They may not even notice that anything has changed.
The underlying systems are extremely complex, so it’s not possible to hide all of it, but I constantly strive to make the SDK interface as easy to use as possible, and I actively support the library…so if you need something, I’m here to take care of you.
While Bamboo is far from being finished, I hope that you will consider it to service your iPhone Facebook needs. One day, someone like Apple or Facebook may publish an official SDK that makes this project obsolete…but given Facebook’s negligent track record with FBConnect, I’m not holding my breath. And until that day comes, right now, Bamboo is your best option.
Honestly, it’s pretty much your only option.
This year, I have re-energized my long standing partnership with Steve Bjorkman, my fabulous illustrator, who’s greeting cards have been a successful staple in retail stores since the early 80s. His softly hand-drawn, humorous style is very popular to a very wide audience, which we have taken advantage of, and harnessed to create iPhone applications for kids and adults alike.
This past week, we published our first iPad app, a Mother’s Day greeting card-style app very similar in concept to the Create a Valentine app we did last year. If you have an iPad, please go take a look at the app, download it, and use it to tell your mom just how much you appreciate her. Your mom will be impressed by the unique, warm style and subtle beauty, and your neighborhood developer will be grateful of your support.
Additionally, I also created a universal app which will run on both the iPhone and the iPad, but unfortunately it just missed being approved in time. It will hit the store on Monday, so if you forgot Mother’s Day (tsk tsk) and have an iPhone, give it a shot! And next year, it’ll still be there.
About the Greeting Card business in the 2010s…
Over the last 10 years or so, digital media has become a prominent form of greeting-sending that traditionally were always paper based. One of the side-effects of this, for a variety of reasons, is that the general quality of such greetings tend to be relatively poor, the receiver often feels as if the sender did not care quite enough to “send a real card.” You have all experienced it at one time or another, I know you have. It’s a very clear case of meaning being codified in the medium, which is fundamentally difficult to change, but we believe it worth attempting to do so.
This effect is something that Steve and I take very seriously, especially Steve, and one of our main aims with our greetings apps is to allow you to create beautiful, thoughtful greetings that evoke those emotions of feeling cared for, loved, appreciated. The attention to detail in Steve’s illustrations, the fact that they are custom-drawn exclusively for these projects, and the similar appearance to traditional greeting cards, these are all things that make what we offer unique, and not something that just anyone can do. His many years of experience in the professional business really shows through his creations, and I feel lucky, honored even to have the chance to work with him. I hope your experience with his work is as wonderful as mine.
An e-card may never fully substitute for a physical one in many circumstances, but it certainly is a welcome addition, and sometimes, it’s just the right thing.
(On a side note, the Valentine iPhone app turned out to be extremely popular, far exceeding my highest hopes. The 2009 distribution was in the thousands…but the 2010 distribution reached well into the hundreds of thousands. This tells me that, most likely, other people see value and appreciate our unique creative approach. Whatever the reason people like it, it helps to build confidence in what we are doing. Not bad for an app that I built after work one day.)
I don’t believe in using nib files in my iPhone/iPad projects, not even the magic ones that are generated by the default project templates. So, as I’ve been looking into creating universal apps, I have noticed than no one seems to have published a sample universal project that doesn’t use nibs.
I thought I would take this opportunity to provide such a project, so that anyone who wants to create a universal iPad/iPhone app with no nibs, has a clean template to start from that is already setup with all boilerplate work in place.
The project is a part of my rcloudlib repo on github, I encourage you to take a look at it, I keep it very lightweight and include items I find that need in almost every project I work on. The most recent version of the app template will always be in the rcloudlib/samples/rcuniversaltemplate directory, and will be expanded in the future. If you want a direct download of the .zip of the super-clean version that will never change, use this link instead.
The project complies and runs, in both iPhone and iPad mode. You can run both iPad/iPhone in the simulator, using the steps described here.
If you have any comments, recommendations, fixes, or anything else…I’d love to hear them.