2015-11-22 5 views
11

über Facebook Accounts Rahmen Zugriff brauche ich etwas Hilfe auf diesem ....Limit-Berechtigungen, wenn

Also das Problem, das ich bin vor ist, dass während des Facebook-Account von ACAccount holen, die Alarmansicht zu vielen Berechtigungen informiert. Ich erhalte eine Benachrichtigungsbox, wenn ich den ACAccount-Login für Facebook verwende.

Es sagt APP_NAME would like to access your basic profile info and list of friends

Dies zeigt sogar, wenn meine Berechtigungen Satz ein leeres Array ist.

NSArray * FB_PERMISSIONS = @[]; 
// or FB_PERMISSIONS = @[@"public_profile", @"likes", @"email"]; 
// It does not matter what the array is -> The alert has extra sentences. 

ACAccountType *FBaccountType= [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; 
NSString *key = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"];; 
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,FB_PERMISSIONS,ACFacebookPermissionsKey, nil]; 
[_accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion: 

Was mache ich hier zu tun versuchen?

Ich bin nur die "public_profile" benötigen, @ "E-Mail "und" mag". Die Warnung sagt APP_NAME would like to access your profile, and likes on your behalf. In addition, APP_NAME would like to access your basic profile info and list of friends

Warum ist dieser zweite Satz dort? Wie werde ich es loswerden? Ich kann eine Reihe von Apps sehen, in denen die zweite Zeile, die über das Basisprofil und die Freundesliste spricht, nicht angezeigt wird.

Erwartetes Ergebnis:

APP_NAME would like to access your profile and likes.

Update:

Überprüfen Sie meine Antwort für Lösung.

+0

Bitte aktualisieren Sie Ihre Frage mit den Konten oder sozialen Maßnahmen, die Sie in Ihrem Abschlussblock durchführen. – quellish

Antwort

4

Es gibt nichts in den FB SDK-Dokumenten, die irgendwas davon erklären. Sie haben dies so gemacht, dass Benutzer die Facebook-Pop-Benutzeroberfläche verwenden und die Berechtigungen auswählen können, die sie autorisieren möchten. Ich denke, die Philosophie von Facebook Design besteht darin, dem Benutzer so viel Kontrolle und Transparenz zu geben. Aber mit dem OS-Popup verbergen sich darunter viele Berechtigungen. Ich denke, es ist Apples Designphilosophie, minimale Informationen zu zeigen. Dies funktioniert am besten für Entwickler-Szenarien, da Benutzer normalerweise ausflippen, wenn sie so viele Berechtigungen sehen, die von der App gestellt werden.

Wie auch immer, wenn Sie einen Blick auf FBSDKLoginManager+Internal.h werfen, können Sie die Fähigkeiten für die Systemanmeldung auschecken. Weiteres Graben, ich habe entdeckt, dass FBSDKLoginButton sinnlos ist. Der beste Weg, dies zu tun, ist die Verwendung Ihrer eigenen Instanz von FBSDKLoginManager, und legen Sie den System-Account-Typ als nativ, und wenn Sie die error code 306 erhalten, fallen zurück auf Standard-Login-Mechanismus.

Irgendwie - >> Dieser Weg zeigt keine zusätzlichen Berechtigungen. Ich habe keine Ahnung wie. Alles, was ich weiß, ist, dass jetzt alles zusammenpasst.

Außerdem müssen Sie einen separaten Listener für ACAccountStoreDidChangeNotification einrichten, so dass Sie einige Rand Fälle binden können. Aber ja, \ m/

2

The Fix

Das Update für dieses Problem Code zu der Ansicht Header-Datei beinhaltet das Hinzufügen sowie Code in Ihrer View-Datei hinzugefügt wird. Die Codebeispiele sind unten aufgeführt.

Zum Ansicht Header-Datei hinzufügen:

// ViewController.h 
#import <FBSDKLoginKit/FBSDKLoginKit.h> 
@interface ViewController : UIViewController 
@property (weak, nonatomic) IBOutlet FBSDKLoginButton *loginButton; 
@end 

Und zu der Ansicht, Datei hinzufügen:

loginButton.readPermissions = 
@[@"public_profile", @"email", @"likes"]; 

Beachten Sie, dass der Kommentar im ersten Beispiel nur als Referenz war.

Warum ist es passiert?

Der Grund, warum Ihr Problem passierte, war, weil das Account Framework und Facebook API standardmäßig denken, dass Sie jede Erlaubnis meinen, die es gibt. Es erfordert, dass Sie im Code genauer sind. Ich bin ziemlich sicher, dass Sie für das erste Beispiel von Code, der in Ihrer Ansicht Header-Datei gehen sollte. Ich verstehe, dass der obige Code nicht das ist, was Sie in die Datei schreiben, an der Sie arbeiten, aber es gibt Ihnen nur eine ungefähre Vorstellung davon.

Immer noch verwirrt?

Wenn Sie immer noch verwirrt sind, bitte Kommentar unten und ich werde versuchen, meine Antwort zu aktualisieren. Es wäre wirklich hilfreich, wenn Sie den Code senden könnten, den Sie mit den Arrays nicht leer ausgefüllt haben. Wenn ich nicht klar war, bitte sag es mir und ich werde mein Bestes tun, um zu helfen. Entschuldigung, wenn es Unannehmlichkeiten gibt!

Quellen

Hauptsächlich gefunden, ich habe die Informationen über hier: https://developers.facebook.com/docs/facebook-login/permissions/overview und hier: https://developers.facebook.com/docs/facebook-login/ios#permissions Facebook ziemlich vertrauenswürdig und lobenswert ist. Ich denke ...

+0

Nein, das ist falsch. – Legolas

+0

Entschuldigung für die Unannehmlichkeiten. Ich sah nicht gut aus. – makertech81

0

Gibt es einen Grund, warum Sie nicht die Facebook API stattdessen verwenden? Für den Zugriff über iOS-APIs muss der Nutzer über die iOS-Einstellungen bei Facebook angemeldet sein. Wenn Sie die gleiche Anfrage mit der Facebook-API stellen, kann es erkennen, ob der Benutzer über die Einstellungen, die FB-App oder Safari angemeldet ist. Und wenn der Benutzer nicht angemeldet ist, es wird sie aufgefordert, dies zu tun (im Gegensatz zu nur erroring und sie zu sagen, so über Einstellungen zu tun)

Version 4.X: https://developers.facebook.com/docs/facebook-login/ios/permissions

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init]; 
[loginManager logInWithReadPermissions:@[@"public_profile", @"likes", @"email"] 
       fromViewController:self 
          handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    //TODO: process error or result 
}]; 

Version 3.X

[FBSession openActiveSessionWithReadPermissions: @[@"public_profile", @"likes", @"email"] 
            allowLoginUI:YES 
           completionHandler: 
^(FBSession *session, FBSessionState state, NSError *error) { 
    // Handle completion by calling AppDelegate 
}]; 
+0

Diese API existiert nicht mehr. Auf welcher Version von graph SDK befinden Sie sich? – Legolas

+0

ah mah schlecht. Ich habe mich auf 3.x bezogen. Ich habe meine Lösung aktualisiert, um auch das 4.x zu enthalten. Gleiche Idee. – Oren

+0

"Gibt es einen Grund, warum du nicht die Facebook API verwendest?" - Überprüfen Sie meine Antwort. "Und wenn der Benutzer nicht eingeloggt ist, werden sie dazu aufgefordert" - Nein, wird es nicht. Wir müssen weiterhin explizite Aufrufe von FBSDKLoginManager vornehmen. Wie auch immer, überprüfe meine Antwort. – Legolas

Verwandte Themen