How to integrate FB iOS SDK 3.1.1 with App Requests - facebook

I've been looking for a solid answer that explains how to keep 3.1.1 in my project but also implementing the app request dialog. What I've read says I need to import Facebook.h and call it like [self.facebook dialog:#"apprequests" andParams:params andDelegate:self]; but when I import Facebook.h and comment out #import <FacebookSDK/FacebookSDK.h> I then get conflicts with
[FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
Could someone guide me through how I maintain my 3.1.1 SDK but also add apprequests? My goal is to select FB users then send an app request to join my app.
Thanks,
Wes

Related

Facebook iOS SDK 3.1 openActiveSession.. always returns 0

I am working on an application that needs to be able to upload an image for the app for iOS versions 5.0+. For iOS 6, I have easily implemented the social feed that works perfectly.
For iOS 5, I am using the Facebook iOS SDK version 3.1. I use the methods that were in the tutorials, and so when I got to publish the image on iOS <6.0, I call the following method:
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI
{
return [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObjects:#"publish_actions", nil] defaultAudience:FBSessionDefaultAudienceFriends allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
[self sessionStateChanged:session
state:status
error:error];
}];
}
With [self openSessionWithAllowLoginUI:YES]; I always get back NO (0) and sessionStateChanged:state:error is never called due to it returning 0.
I have the app set up correctly, the two different parts set up in the plist, etc. etc., but for some reason this code on my iOS 5.0 device does not want to return correctly. (Just like in openSessionWithAllowLoginUI almost always returns NO)
Does anyone have any solutions on why it would always be returning no? I have the official FB app installed on the device, I am logged into my account...I am not getting any errors or anything...
Thanks in advance!

iOS 6 facebook Auth Application status

I'm doing Facebook auth with SDK 3.1 on iOS6.
I have an existing app that was using old FB SDK.
Apparently, I've implemented:
[FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
but initially I've got "error 2" with FBSessionStateClosedLoginFailed after the first logging attempt.
No auth dialog was provided. App initially became inactive in iOS-Settings -> Facebook.
I've tried several solutions, but the setting is disabled by default on any new device with configured Facebook account.
Please, help :)
Did you try with Facebook SDK 3.5.1? I have developed a plugin for game developers using the same SDK and none of my plugin user facing this problem.

Facebook IOS SDK 3.1 - reauthorizeWithPublishPermissions?

Just upgraded to the Facebook iOS SDK 3.1 and already running into problems.
My app can't find the facebook method reauthorizeWithPublishPermissions, and it also hasn't got a clue what the static FBSessionDefaultAudienceFriends definition is!
Anyone else seen these problems? Can't believe that the 3.1 SDK would have these basic bugs in it, so I'm blaming my stupidity for now!!
For completeness, here is my code:
[FBSession reauthorizeWithPublishPermissions:[NSArray arrayWithObjects:#"publish_stream", #"publish_actions",nil]
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
// Do something...
}];
Thanks.
#Zotter, answer is depreciated. Now (with latest Facebook iOS SDK, I guess v.3.19) you've to use - (void)requestNewReadPermissions:(NSArray *)readPermissions completionHandler:(FBSessionRequestPermissionResultHandler)handler; method, to authorise app with publish permissions.
[FBSession.activeSession requestNewPublishPermissions:permissions
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
if(!error) {
}
}];
/*! No audience needed; this value is useful for cases where data will only be read from Facebook */
FBSessionDefaultAudienceNone = 0,
/*! Indicates that only the user is able to see posts made by the application */
FBSessionDefaultAudienceOnlyMe = 10,
/*! Indicates that the user's friends are able to see posts made by the application */
FBSessionDefaultAudienceFriends = 20,
/*! Indicates that all Facebook users are able to see posts made by the application */
FBSessionDefaultAudienceEveryone = 30,
reauthorizeWithPublishPermissions: is an instance method
[FBSession.activeSession reauthorizeWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:
^(FBSession *session,
NSError *error)
{
...
}];
I had this problem. I was using an old version of Cocoapods that wasn't properly upgrading the source from 3.0 to 3.1. If you're using Cocoapods, upgrade to 0.14.0 and try again. If not, double check to make sure you have the latest Facebook SDK from master - if you don't see those values in FBSession.h, you probably have an old version of the SDK.

Facebook SDK: openActiveSessionWithPermissions completionHandler not called

Using the code from Facebook I have implemented
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
#"publish_actions",
nil];
return [FBSession openActiveSessionWithPermissions:permissions
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
NSLog(#"error %#", error);
[self sessionStateChanged:session
state:state
error:error];
}];
}
It returns NO which I understand because it's a first time login, and the loginUI works (it sends the user to FB and asks them to give permissions) and then returns but completionHandler block is never ever run. It just returns to the app and nada.
I assume you following Implement the Login Flow of Facebook SDK but worth reading that section again as it explains everything. Make sure that you handled openURL and handleOpenURL methods in delegate. Also check openSessionWithAllowLoginUI almost always returns NO
Little late, but just in case someone comes checking...
Switching from openActiveSession to the instance method openWithCompletionHandler did the trick for me.
from the official doc
handler
... If a block is provided, the FBSession object will call the block each time the session changes state.
I fixed this problem my solving Open Graph setups and by studying Scrumptious example code from FB such as these functions [FBSession.activeSession handleOpenURL:url] and [FBSession.activeSession handleDidBecomeActive];

Facebook login on iPhone app

I am trying to allow users to login to my app, through Facebook. I am following this guide https://developers.facebook.com/docs/howtos/login-with-facebook-using-ios-sdk/
I have followed all of the steps including the step named "Getting started with the Facebook sdk for iOS".
When I copy and paste the following method, I get an error here:
return [FBSession openActiveSessionWithPermissions:permissions
Here is the method I copied and pasted.
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
#"user_likes",
#"read_stream",
nil];
return [FBSession openActiveSessionWithPermissions:permissions
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
The error says this: "No known class method for selector 'openActiveSessionWithPermissions:allowLoginUI:completionHandler:'"
Can someone help me figure out what I am doing wrong?
Let me know if you'd like to see some more of my code to figure the problem out.
update you facebook sdk to the latest one, and follow Scrumptious example.
I really doubt this is gonna solve your problem, but it's worth a shot. NSError usually takes an ampersand ("&") before getting passed as an argument. So write it as error:&error instead.
Complementing mLamaa answer, take a look on Facebook Upgrade Guide and follow these 2 steps:
1- Update facebook SDK
2- Replace the openActiveSessionWithPermissions function to openActiveSessionWithReadPermissions
Reference:
https://developers.facebook.com/docs/ios/upgrading/
Upgrading from 3.0 to 3.1
"Therefore, if your app previously used v3.0 of the SDK, you will need to remove usage of openActiveSessionWithPermissions:allowLoginUI:completionHandler: and replace it with openActiveSessionWithReadPermissions:allowLoginUI:completionHandler: (or even more simply, openActiveSessionWithAllowLoginUI)."