Facebook iOS SDK login mit Facebook app installiert
UPDATE: ich habe erkannt, dass die unten problem tritt nur auf, wenn der Benutzer schon hat Facebook Zugriff auf mein app, und dann reinstals meine app. Das erste mal, wählt der Benutzer den Facebook-button in meiner app geht es um die Facebook app zu bekommen-Authentifizierung, aber da die Authentifizierung status ist noch gespeichert in der Facebook-app, es kehrt sofort zu meinem app ohne Erklärung an den Benutzer, und die postToFacebookWall-Methode fehlschlägt.
UPDATE 2: ich landete Umsetzung der Lösung hier gefunden: Wie autorisieren Sie Benutzer durch einen DIALOG mit der NEUEN Facebook Connect iOS-API? vermieden und die Facebook app. Safari ist besser, weil zumindest der Benutzer bekommt eine Nachricht, dass Sie sich einloggen wird. Aber die Feed-Dialog immer noch nicht das erste mal, als zuvor.
Bin ich mit dem, was muss ein häufiges problem, aber ich habe nicht in der Lage gewesen, um die Lösung zu finden noch. Beachten Sie, dass meine app beschränkt sich auf iOS 5 und höher.
Ich habe eine app mit einem Facebook button für die Buchung von einem Benutzer Wand. Wenn Sie die Taste drücken, die app wird überprüfen, um zu sehen, ob der Benutzer bereits die Erlaubnis gegeben, um die app zu veröffentlichen an der Wand. Wenn Sie haben, eine Ansicht öffnet sich mit einem Feed-Dialog mit der Wand-post-Informationen. Wenn Sie noch nicht, Safari wird geöffnet und der Benutzer wird erlaubt, um sich einzuloggen. Nach der Anmeldung werden Sie zurück zu der app und den Feed-Dialog anzeigen wird pop-up.
Dies funktioniert am Simulator, und auf mein Gerät, wenn die Facebook-app nicht installiert ist. Wenn die Facebook app installiert ist, die Benutzer der Facebook-app, aber dann sofort wieder die original-app, ohne dass der Benutzer etwas zu tun. Die Feed-Dialog öffnet sich, aber es ist komplett leer und schließt automatisch. Drücken Sie die Facebook-Taste nochmals, um die Feed-Dialog anzeigen, wie es soll, sobald der Benutzer sein Einverständnis gegeben hat, um die app zu post an Ihre Wand.
Ich ziemlich viel folgte den Anweisungen finden Sie hier:
http://developers.facebook.com/docs/mobile/ios/build/#implementsso
und hier:
http://developers.facebook.com/docs/reference/dialogs/feed/
In der AppDelegate habe ich den folgenden code:
- (void)loginToFacebook
{
//Set up facebook
self.facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
self.facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
self.facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
if (![self.facebook isSessionValid]) {
[self.facebook authorize:nil];
}
}
//This is an FBSessionDelegate protocol method
//that gets called after a successful login
- (void)fbDidLogin
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[self.facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[self.facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
[[NSNotificationCenter defaultCenter] postNotificationName:@"POST_TO_FACEBOOK_WALL" object:nil];
}
//This is a UIApplicationDelegate protocol method
//It is called when safari is dismissed
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [self.facebook handleOpenURL:url];
}
Der einzige Unterschied zwischen dieser und der Beispiel-code ist, dass ich Hinzugefügt eine NSNotification, abgeholt von meiner view-controller, wo ich den folgenden code:
- (void)facebookButtonPressed:(UIControl*)sender
{
Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook];
if (![facebook isSessionValid])
{
//Login to facebook if not already logged in
[(AppDelegate*)[[UIApplication sharedApplication] delegate] loginToFacebook];
}
else
{
[self postToFacebookWall];
}
}
- (void)postToFacebookWall
{
Facebook *facebook = [(AppDelegate*)[[UIApplication sharedApplication] delegate] facebook];
/*Facebook Application ID*/
//TODO: Get this either from the AppDelegate facebook property or the info plist
NSString *client_id = @"YOUR_APP_ID";
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
kAppId, @"app_id",
@"http://developers.facebook.com/docs/reference/dialogs/", @"link",
@"http://fbrell.com/f8.jpg", @"picture",
@"Facebook Dialogs", @"name",
@"Reference Documentation", @"caption",
@"Using Dialogs to interact with users.", @"description",
nil];
[facebook dialog:@"feed" andParams:params andDelegate:self];
}
Weiß jemand, wie mein Problem behoben? (Auch im Fall, dass es nicht klar ist, YOUR_APP_ID durch meine app-id in meinem code).
InformationsquelleAutor Darren | 2012-03-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das klingt wie ein out-Fall, dass es in diesem Szenario "nur wenn die app installiert wurde, authed, dann deinstalliert, dann neu installiert'.
Sollten Sie in der Lage sein, zu fallen-zurück zu den "klassischen web-view-Authentifizierung", wenn diese bestimmte Sache passiert.
Dann wieder, Sie könnte auch mit safari auth zu, nehme ich an.
InformationsquelleAutor slf
Landete ich der Lösung meiner Fragen mit der Umsetzung der beiden Lösungen finden Sie hier:
https://stackoverflow.com/a/5683454/472344
https://stackoverflow.com/a/9137887/472344
InformationsquelleAutor Darren