2013-02-18 12 views
11

Ich habe Probleme der Umsetzung dieser Funktionalität nach folgenden Facebook-Tutorial mit: https://developers.facebook.com/docs/howtos/share-appid-across-multiple-apps-ios-sdk/Facebook & iOS: Teilen Sie eine ID-App über mehrere Apps

Grundsätzlich habe ich zwei Ziele unter dem gleichen Projekt - eine für die kostenlose Version und eine für die Prämie. Ich habe erstellt und ein einziges Facebook-App für das Einrichten und hinzugefügt 2-URL-Schema Suffixe:

two URL scheme suffices

Außerdem hat ich die Suffixe in den jeweiligen plist Dateien hinzugefügt. Zum Beispiel wird die Prämie App definiert mit:

screenshot of info.plist file

Wo die "xxxxx ..." meine nur Facebook-App-ID.

Nach all dem kann ich mich immer noch nicht bei der Anwendung unter iOS 5.0 und 6.0 anmelden (mit dem nativen FB-Dialog oder dem SDK-Dialog in Safari). Dies ist, was ich bekomme, wenn ich über Safari melden:

alert with message "cannot open page, safari cannot open the page because the address is invalid"

Der Code die Login zu tun ist:

NSArray *permissions = kInitialPermissions; 

BOOL result = NO; 
FBSession *session = [[FBSession alloc] initWithAppID:@"xxxxxxxxxxx" 
              permissions:@[] 
             urlSchemeSuffix:@"premium" 
            tokenCacheStrategy:nil]; 

if (allowLoginUI || 
    (session.state == FBSessionStateCreatedTokenLoaded)) { 
    [FBSession setActiveSession:session]; 
} 

result = [FBSession openActiveSessionWithReadPermissions:permissions 
               allowLoginUI:allowLoginUI 
              completionHandler:completion]; 
return result; 

Alle Ideen werden geschätzt. Vielen Dank!

Antwort

0

Ihr Problem ist, dass das benutzerdefinierte URL-Schema von iOS nicht erkannt wird. Hier sind einige mögliche Ursachen:

  1. Ich sehe, dass Sie richtig CFBundleURLSchemes Schlüssel in Ihrer plist zu einer Reihe von unterstützten Regelungen festgelegt haben. Sie müssen auch CFBundleURLName auf etwas wie com.myApp.MyURLScheme setzen. Hast du das gemacht?

  2. Nachdem Sie die Methoden aufgerufen und beendet haben, ruft iOS die Methode - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation Ihres App-Delegierten auf. Sie müssen diese Methode ebenfalls implementieren, und sie muss YES zurückgeben. Hast du?

  3. Vergewissern Sie sich, dass das URL-Format korrekt ist. fbxxxxxxpremium://foo=bar wird nicht funktionieren, aber fbxxxxxxpremium://?foo=bar wird (die ? ist obligatorisch).

Bitte beachten Sie, dass die Delegatmethoden etwas anders sein, wenn Sie iOS 4.1 oder früher ausgerichtet sind.

Weitere Informationen und Beispielcode finden Sie im Abschnitt Mit anderen Apps kommunizieren von Advanced App Tricks in der iOS SDK-Dokumentation.

+0

Danke für deine Antwort, Aaron. Ich habe mehrere CFBundleURLNames ausprobiert, wie Sie in 1 vorgeschlagen haben, aber ich werde nach erfolgreicher Anmeldung in Safari immer noch nicht zur App zurückgeschaltet. 2 wurde bereits in meinem AppDelegate implementiert. Irgendwelche Vorschläge? – Stavash

+0

Wie sieht die URL aus, die Sie in Safari eingeben? Funktioniert es, wenn Sie keine Parameter übergeben? (Geben Sie einfach "fbxxxxxxpremium: //') ein. –

+0

Die Eingabe von "fbxxxxxxpremium: //" in Safari schaltet zurück zur App. Was ist denn hier los?? : O – Stavash

0

ich glaube, das Problem ist, wenn Sie anrufen:

result = [FBSession openActiveSessionWithReadPermissions:permissions 
              allowLoginUI:allowLoginUI 
             completionHandler:completion]; 

die Sitzung, die geöffnet wird, nicht das URL-Schema Suffix haben.

So sollten Sie

[session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent 
     completionHandler:completion]; 
+0

Danke @Moxy, Ich habe das versucht, bekomme aber immer noch genau das gleiche Ergebnis. Ich habe auch ein Problem mit diesem Ansatz - es ist nicht gleichbedeutend mit meinem Aufruf (keine Angabe der ursprünglichen Berechtigungen) – Stavash

+0

Sie können die Berechtigungen angeben, wenn Sie die Sitzung initialisieren. In Ihrem Code übergeben Sie ein leeres Array. Sie können die gewünschten Berechtigungen weitergeben. – Moxy

1

nennen sowie das Hinzufügen der fbxxxxxxxxxxpremium URL-Schema auf die die URL-Typen Array in der plist-Datei (die Sie scheinen zu tun), um einen neuen Schlüssel/Wert hinzu:

key = FacebookUrlSchemeSuffix 
value = premium 

So in der plist-Datei selbst:

<key>FacebookUrlSchemeSuffix</key> 
<string>premium</string> 

Dieses regelte es für mich. Die Facebook-Dokumente verweisen darauf, machen aber IMO nicht klar.

Verwandte Themen