Limitar los permissions al acceder a Facebook utilizando el marco de counts

Necesito ayuda en este …

Entonces, el problema que estoy enfrentando es que mientras se obtiene la count de Facebook de ACAccount, la vista de alerta informa demasiados permissions. Recibo un cuadro de alerta cuando utilizo el inicio de session ACAccount para Facebook.

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

Esto aparece incluso cuando mi set de permissions es una matriz vacía.

 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: 

¿Qué estoy tratando de hacer aquí?

Solo necesito el " public_profile ", @ " email " y "me gusta ". La alerta dice que 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 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

¿Por qué está esa segunda oración allí? ¿Como me deshago de esto? Puedo ver una serie de aplicaciones donde la segunda línea que habla sobre el perfil básico y la list de amigos no aparece.

Resultado Esperado:

APP_NAME would like to access your profile and likes.

Actualizar:

Verifique mi respuesta para la solución.

No hay nada en los documentos de FB SDK que expliquen nada de esto. Se hicieron de esta manera para que los usuarios puedan usar la interfaz de usuario pop de Facebook y elegir los permissions que desean autorizar. Creo que la filosofía del layout de Facebook es dar tanto control y transparencia al usuario. Pero con el sistema operativo emergente oculta muchos permissions debajo. Supongo que es la filosofía de layout de Apple para mostrar información mínima. Esto funciona mejor para el escenario de los desarrolladores, ya que los usuarios generalmente se asustan cuando ven que la aplicación solicita tantos permissions.

De todos modos, si FBSDKLoginManager+Internal.h un vistazo a FBSDKLoginManager+Internal.h puedes comprobar las capacidades para el inicio de session del sistema. Más investigación, descubrí que FBSDKLoginButton no tiene sentido. La mejor manera de hacerlo es usar su propia instancia de FBSDKLoginManager y establecer que el tipo de count del sistema sea nativo, y si obtiene el error code 306 , vuelva al mecanismo de inicio de session pnetworkingeterminado.

De alguna manera – >> De esta forma no muestra permissions adicionales. No tengo idea de cómo. Todo lo que sé es que todo cae en su lugar ahora.

Además, tendrás que configurar un oyente por separado para ACAccountStoreDidChangeNotification para que puedas atar algunos casos ACAccountStoreDidChangeNotification . Pero sí, \ m /

La solución

La solución a este problema consiste en agregar código al file de encabezado de vista, así como agregar código a su file de vista. Los ejemplos de código se enumeran a continuación.

Para el file de encabezado de vista, agregue:

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

Y al file de vista agregue:

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

Tenga en count que el comentario en el primer ejemplo fue solo de reference.

¿Por qué sucedió?

La razón por la que ocurrió su problema fue porque el Marco de counts y la API de Facebook piensan de forma pnetworkingeterminada que se refiere a todos los permissions que hay. Requiere que sea más específico en el código. Estoy bastante seguro de que tienes que hacer el primer ejemplo de código que se suponía que iría en tu file de cabecera de vista. Entiendo que el código anterior no es lo que pondrás en el file en el que estás trabajando, pero solo te da una idea aproximada de hacerlo.

¿Sigo confundido?

Si todavía está confundido, coméntelo a continuación e intentaré actualizar mi respuesta. Sería de gran ayuda si pudiera enviar el código que estaba haciendo con las matrices llenadas no en blanco. Si no estaba claro, dímelo y haré lo mejor que pueda para ayudarlo. Lo siento si hay algún inconveniente!

Fuentes

Sobre todo, encontré la información aquí: https://developers.facebook.com/docs/facebook-login/permissions/overview y aquí: https://developers.facebook.com/docs/facebook-login/ios# permissions Facebook es bastante confiable y acnetworkingitable. Creo…

¿Hay alguna razón por la que no estás usando la API de Facebook? Solicitar acceso a través de las API de iOS requerirá que el usuario inicie session en Facebook a través de la configuration de iOS. Si realiza la misma request con la API de Facebook, puede detectar si el usuario ha iniciado session a través de la configuration, la aplicación FB o Safari. Y si el usuario no está conectado, se les pedirá que lo hagan (en lugar de simplemente erradicar y decirles que lo hagan a través de la configuration)

Versión 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 }]; 

Versión 3.X

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