Category Archives: Development

Opening a Facebook page on iOS

One of the last features that we’ve added in our iOS version was a link to our Facebook page. While developing this feature, we had encountered a little problem.

When you are trying to open a Facebook link on a device that has Facebook app installed on it using the following command :

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”http://www.facebook.com/[YOUR_PAGE]“]]

you will end up opening the Facebook app when it displays the last page you accessed and not the requested page.

So how can this be solved?

The solution is that you have to change the Facebook url, instead of including [YOUR_PAGE] name in the link, you have to include your page id. In order to get [YOUR_PAGE] id, you should run the following url:

https://graph.facebook.com/[YOUR_PAGE]

By running this url you will get the following JSON answer:

{

“id”: “XXX”,

}

After extracting the “id” field from the JSON, you can now create the final URL and forward the user to it:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”http://www.facebook.com/[id]“]]

By the way, from what I checked, this feature is not IOS version dependent, I’ve tested it on IOS 5 and IOS 6. Also you don’t have to open it as openUrl:, you may also use UIWebView in order to complete this action.

Jane V

Chief App Developer

Price Rhythm

Advertisements

iOS Back Button Events

Well, I was struggling with this for a couple of days, and decided to share it.

We are developing an iphone version for our application and during the development I came up with the following problem.

We have a UINavigationController in our app that is responsible for managing the navigations.

In the navigationController we have a customized back button:

navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@”back” style:UIBarButtonItemStylePlain target:nil action:nil];

The problem with this button is that although it lets you define target and action for your logic in case of click, it is not calling them. This behavior is also explained in the apple documentation, but no solution is given to the problem.

So at this point if you want to add your logic when back button is pressed you may find yourself doing the following and reinventing the wheel:

However, there is a really simple solution that can be used:

If we are trying to simplify the problem, this is the scenario:

  1. Back button is pressed
  2. viewWillDisappear is called

So, we can insert our code in viewWillDisappear method. But (since we always have a but) this method can also be called when there is a new view that is pushed in the stack above our view, which makes it disappear.

How can we check this? Actually it is really simple 🙂

In the View Controller programming guide [https://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/RespondingtoDisplay-Notifications/RespondingtoDisplay-Notifications.html#//apple_ref/doc/uid/TP40007457-CH12-SW1] you can find out in which state the viewWillDisappear method is called, if it is by calling the back button so it returns to the parent controller or the new controller is pushed above.

The code should look like this:

– (void)viewWillDisappear:(BOOL)animated

{

[super viewWillDisappear:animated];

// Checking if we are disappearing because of the back button

if ([self isMovingFromParentViewController])

{

// In case that back button is pressed, insert your code here

}

}

Jane V

Chief App Developer

Price Rhythm