8 Stimmen

IOS Facebook SDK - Berechtigungen überprüfen

Ich habe ein Facebook SSO, das perfekt auf meiner App funktioniert, unter Verwendung der neuesten Version des Facebook Objective-C SDKs. Ich muss eine zusätzliche Berechtigung innerhalb der App anfordern, wenn der Benutzer etwas Bestimmtes tut. Ich muss diese Berechtigung nicht anfordern, wenn der Benutzer sie mir bereits gegeben hat, also vermute ich, dass es in Facebook SDK eine Methode geben sollte

-(BOOL) checkPermission:(NSString*) permission;

damit ich es so verwenden kann:

if( [facebook checkPermission:@"email"] ) {

Gibt es einen Weg, dies zu tun?

22voto

Diese Frage ist etwas alt, aber Sie können jetzt überprüfen, welche Berechtigungen die aktive Sitzung hat, ohne eine Graph-Anforderung zu stellen. So wird es im HelloFacebookSample gemacht:

if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
    // Berechtigung existiert nicht
} else {
    // Berechtigung existiert
}

Ersetzen Sie einfach "publish_actions" durch "email".

7voto

Juicy Scripter Punkte 25413

Das SDK bietet keine direkte Methode zum Überprüfen spezifischer Berechtigungen, aber Sie können überprüfen, ob der Benutzer Ihrer Anwendung Berechtigungen gewährt hat, indem Sie die Berechtigungen Verbindung des Benutzer Objekts im Graph API überprüfen.

GET https://graph.facebook.com/me/permissions

Dasselbe kann mit einer FQL Abfrage auf der Berechtigungen Tabelle erreicht werden.

SELECT email FROM permissions WHERE uid = me()

0voto

Ferran Maylinch Punkte 10139

WICHTIG: Dies scheint für eine ältere Version des Facebook SDK (zum Beispiel 3.9.0) zuzutreffen. In 3.15.0 funktioniert es nicht mehr auf diese Weise. Du solltest [session.permissions] verwenden, wie es Raphaël Agneau in seiner Antwort sagt.

Du musst die folgende Methode verwenden, weil [FBSession activeSession].permissions anscheinend die angeforderten Berechtigungen zurückgibt, nicht die tatsächlichen.

[FBRequestConnection startWithGraphPath:@"/me/permissions"
                      completionHandler:^(FBRequestConnection *c, id result, NSError *error) {
  if (!error) {
    NSDictionary *permissions= [(NSArray *)[result data] objectAtIndex(0);
    if (![permissions objectForKey:@"publish_actions"]) {
      // Ok, fahre fort mit deiner Logik
    } else {
      // Berechtigung nicht gefunden, vielleicht anfordern (siehe unten)
    }
  } else {
    // Behandele den Fehler
  }
}];

Weitere Informationen findest du hier:

https://developers.facebook.com/docs/facebook-login/ios/v2.0#permissions-checking

Wenn die Berechtigung nicht gefunden wird, kannst du sie auf diese Weise anfordern:

[session requestNewPublishPermissions:PERMISSIONS_YOU_WANT
                      defaultAudience:FBSessionDefaultAudienceFriends
                    completionHandler:^(FBSession* session, NSError* error) {

    // Versuche es erneut mit /me/permissions oben
}];

0voto

Tyler White Punkte 388

Hier ist mein Code für FBSDK 4.2.0 zum Überprüfen von Berechtigungen. Der String, der übergeben wird, ist der Name der Berechtigung, z.B. "publish_actions"

- (void) ÜberprüfenSieDieBerechtigung:(NSString *)berechtigung gewährt:(void (^)(void))sBlock verweigert:(void (^)(void))fBlock {

  if ([FBSDKAccessToken currentAccessToken]) {

    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me/permissions" parameters:nil] startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {

        BOOL hatBerechtigung = NO;

        if (!error) {

            NSArray *berechtigungen = [result objectForKey:@"data"];

            for (NSDictionary *dict in berechtigungen) {

                if ([[dict objectForKey:@"permission"] isEqualToString:berechtigung]) {

                    if ([[dict objectForKey:@"status"] isEqualToString:@"granted"]) {

                        hatBerechtigung = YES;
                    }
                }
            }
         }

        if (hatBerechtigung) {

            (sBlock) ? sBlock() : sBlock;

        } else {

            (fBlock) ? fBlock() : fBlock;
        }
     }];

  } else {

    (fBlock) ? fBlock() : fBlock;
}
}

0voto

Pochi Punkte 13352

Für das SDK 4+ gibt es zwei Möglichkeiten, um die Berechtigungen zu erhalten:

[[FBSDKAccessToken currentAccessToken] hasGranted:@"user_photos"]

oder

[[[FBSDKAccessToken currentAccessToken] permissions] containsObject:@"user_photos"]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X