2015-11-22 10 views
11

Ho bisogno di aiuto su questo ....permessi limite quando si accede a Facebook utilizzando Conti quadro

Quindi il problema che sto affrontando è che durante il recupero l'account di Facebook da ACAccount, la vista avviso informa troppi permessi. Ricevo una casella di avviso quando utilizzo l'accesso ACAccount per Facebook.

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

Questo si presenta anche quando il mio set di autorizzazioni è un array vuoto.

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: 

Che cosa sto cercando di fare qui?

Sono solo la necessità della "public_profile", @ "email "e" piace". L'avviso dice 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

Perché questa seconda frase è lì? Come faccio a liberarmene? Riesco a vedere una serie di app in cui la seconda riga che parla del profilo di base e dell'elenco di amici non viene visualizzata.

Risultato atteso:

APP_NAME would like to access your profile and likes.

Aggiornamento:

leggi la mia risposta per la soluzione.

+0

Si prega di aggiornare la domanda con l'account o l'azione sociale che si sta eseguendo nel blocco di completamento. – quellish

risposta

4

Non c'è nulla nei documenti dell'SDK dell'FB che spieghi tutto ciò. Sono stati creati in questo modo in modo che gli utenti possano utilizzare l'interfaccia utente pop di Facebook e selezionare le autorizzazioni che desiderano autorizzare. Immagino che la filosofia del design di Facebook sia quella di dare il massimo controllo e trasparenza all'utente. Ma con il pop-up del sistema operativo nasconde molte autorizzazioni sottostanti. Immagino che sia la filosofia di design di Apple mostrare informazioni minime. Questo funziona meglio per lo scenario degli sviluppatori, dato che gli utenti di solito si spaventano quando vedono l'app richiedere così tante autorizzazioni.

In ogni caso, se si presta uno sguardo a FBSDKLoginManager+Internal.h è possibile eseguire il checkout delle funzionalità per l'accesso al sistema. Ulteriori scavi, ho scoperto che FBSDKLoginButton è inutile. Il modo migliore per farlo consiste nell'utilizzare la propria istanza di FBSDKLoginManager e impostare il tipo di account di sistema come nativo e, se si ottiene error code 306, tornare al meccanismo di accesso predefinito.

In qualche modo - >> In questo modo non vengono visualizzate autorizzazioni aggiuntive. Non ho idea di come. Tutto quello che so è che tutto si sistema al momento.

Inoltre, è necessario impostare un listener separato per ACAccountStoreDidChangeNotification in modo da poter collegare alcuni casi limite. Ma sì, \ m/

2

The Fix

La correzione di questo problema comporta l'aggiunta di codice al file di intestazione vista così come l'aggiunta di codice al file visualizzazione. Gli esempi di codice sono elencati di seguito.

Per la vista file di intestazione aggiuntivo:

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

E per il file visualizzazione aggiuntivo:

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

Nota che il commento nel primo esempio era solo per riferimento.

Perché è successo?

Il motivo per cui il problema si è verificato è dovuto al fatto che l'Account Framework e l'API di Facebook pensano per impostazione predefinita che si intende ogni autorizzazione esistente. Richiede di essere più specifici nel codice. Sono abbastanza sicuro che tu abbia dovuto fare il primo esempio di codice che doveva andare nel tuo file di visualizzazione. Capisco che il codice sopra non è quello che inserirai nel file su cui stai lavorando, ma ti dà solo un'idea approssimativa per farlo.

Ancora confuso?

Se si è ancora confusi, si prega di commentare qui sotto e cercherò di aggiornare la mia risposta. Sarebbe molto utile se tu potessi inviare il codice che stavi facendo con gli array riempiti non in bianco. Se non sono stato chiaro, per favore dimmelo e farò del mio meglio per aiutarti. Scusa se c'è qualche inconveniente!

Fonti

Principalmente, ho trovato le informazioni su qui: https://developers.facebook.com/docs/facebook-login/permissions/overview e qui: https://developers.facebook.com/docs/facebook-login/ios#permissions Facebook è abbastanza affidabile e credibile. Penso che ...

+0

Non è sbagliato. – Legolas

+0

Ci scusiamo per l'inconveniente. Non stavo guardando bene. – makertech81

0

C'è un motivo per cui non utilizzi l'API di Facebook? Richiedere l'accesso tramite API iOS richiede all'utente di accedere a Facebook tramite le impostazioni di iOS. Se si effettua la stessa richiesta con l'API di Facebook, è possibile rilevare se l'utente è connesso tramite le impostazioni, l'app FB o Safari. E se l'utente non è connesso, ti verrà chiesto loro di farlo (al contrario di appena erroring fuori e dicendo loro di farlo attraverso le impostazioni)

la versione 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 
}]; 

Versione 3.X

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

Questa API non esiste più. Su quale versione del grafico SDK sei? – Legolas

+0

ah mah male. Mi riferivo a 3.x. Ho aggiornato la mia soluzione per includere anche il 4.x. La stessa idea però. – Oren

+0

"C'è un motivo per cui non stai usando l'API di Facebook, invece?" - Controlla la mia risposta. "E se l'utente non ha effettuato l'accesso, chiederà loro di farlo" - No non lo farà. Dobbiamo ancora effettuare chiamate esplicite da FBSDKLoginManager. Ad ogni modo, controlla la mia risposta. – Legolas

Problemi correlati