iCulture forum | iPhone, iPad,  iPod touch, Apple TV en iOS

iCulture forum | iPhone, iPad, iPod touch, Apple TV en iOS (https://forum.iculture.nl/)
-   Ontwikkelen voor iOS (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/)
-   -   iOS Facebook SDK (https://forum.iculture.nl/f133/development/f58/ontwikkelen-voor-ios/93816-ios-facebook-sdk.html)

Jeroen0704 21-06-11 15:09

iOS Facebook SDK
 
Hee,

Ik wil graag Facebook aan mijn app toevoegen. Ik ben dus naar developers pagina op de Facebook site gegaan en heb alle stappen gevolgd op deze pagina.

Dit is gelukt en je kunt nu inloggen. Alleen nu staat de code in de AppDelegate en moet je dus meteen inloggen als de App opstart. Dit is niet de bedoeling omdat Facebook natuurlijk niet verplicht is, maar gewoon een optie. Als ik de code in een viewController zet, dan kun je wel inloggen maar wordt de fbDidLogin functie niet aangeroepen en worden je gegevens dus niet opgeslagen als je ingelogd bent. Als je da app dan opnieuw opstart moet je dus weer inloggen. Dit is niet erg gebruiksvriendelijk en ik vind het ook niet handig werken.

Weet iemand een oplossing voor mijn probleem?

Groeten Jeroen

JornZ 23-06-11 13:04

Ik vermoed dat de viewcontroller waar je de code nu in hebt gezet geen FBSessionDelegate is, dus wordt ook de callback niet afgehandeld door deze viewcontroller.

Dus je moet mijn inziens iets veranderen in de h. file van je viewcontroller in de trant van:
@interface MyUIViewController: UIViewController <FBSessionDelegate> {
...

Jeroen0704 23-06-11 19:58

Die had ik er ook ingezet, maar dat werkte helaas niet.

Jeroen0704 24-06-11 16:24

Het is gelukt!

Ik moest de volgende method in de AppDelegate zetten en ik had hem ook in de viewController staan.
Code:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [[self.viewController facebook] handleOpenURL:url];
}


Whacko 24-06-11 16:47

Ah... dan snap ik al wat er mis is.
Je hebt je AppDelegate als delegate opgegeven van de Facebook SDK. Als je je viewcontroller meegeeft, dan hoef je niet vanuit je AppDelegate de method op de viewController aan te roepen.

Jeroen0704 24-06-11 16:49

@Whacko

Ik begrijp niet helemaal wat je bedoelt, maar eerst had ik de volgende methode in mijn viewController staan:

Code:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    return [facebook handleOpenURL:url];
}


JornZ 27-06-11 16:18

De beschrijving over de facebook SDK vraagt dat je de application:handleOpenUrl: method implementeert, dit is een onderdeel van het UIApplicationDelegate protocol. Overigens is deze "deprecated" (zie Loading…) en vraagt Apple om in plaats daarvan application:openURL:sourceApplication:annotation: te implementeren. Deze code wordt dus niet uitgevoerd als dit niet in een object staat wat zich conformeert aan het UIApplicationDelegate protocol, vandaar dat het alleen werkt in je AppDelegate.

In het voorbeeld op de facebook website gaan ze er vanuit dat je het Facebook object als instance variable in de AppDelegate aanmaakt en dan klopt het dus dat je dan [facebook handleOpenUrl:url] kan aanroepen (schijnbaar heeft het Facebook object een methode die handleOpenUrl heet). Als jij het facebook object als instance variable in een viewcontroller zet (die jij viewController hebt genoemd) dan is het logisch dat e.e.a. nu werkt na jouw aanpassing. Dit lijkt me ook de meest geschikte manier. Wel zou volgens mij nog steeds die viewController de FBSessionDelegate moeten zijn.


Alle tijden zijn GMT +2. Het is nu 18:34.