2014-02-04 1 views
1

изменить файл Info.plist во время выполнения программы:IOS - Facebook SDK - SSO - Вход без входа в диалоговом

-(void) setBundleUrlScheme:(NSString*)fbAppId { 

    NSString *path= [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]; 

    if(path){ 
     NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
     NSMutableArray* bundleUrlTypesArray = [dict objectForKey:@"CFBundleURLTypes"]; 
     NSMutableDictionary* bundleURLSchemes = [bundleUrlTypesArray objectAtIndex:0]; 

     // set wanted fb app id to plist CFBundleURLSchemes 
     [bundleURLSchemes setObject:[NSArray arrayWithObject:[NSString stringWithFormat:@"fb%@", fbAppId]] forKey:@"CFBundleURLSchemes"]; 

     // write back to file 
     [dict writeToFile:path atomically:YES]; 

} 

}

И после этого, я пытаюсь логин на Facebook без диалога входа в систему (мое приложение позволяет SSO):

[FBSession openActiveSessionWithReadPermissions:@[@"basic_info"] 
            allowLoginUI:NO 
           pletionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 

      // error occured 
      if(error || state == FBSessionStateClosedLoginFailed) { 
       NSLog(@"ERROR:%@", error); 
      } 

      // session opened succefully, run query 
      else if (state == FBSessionStateOpen){ 

       NSLog(@"state:%d", state); 
       NSLog(@"I LOGGED IN!"); 

       sucessBlock(); 
      } 
     }]; 

Каждый раз, когда я прохожу NO в allowLoginUI, openActiveSessionWithReadPermissions возвращает NO и успех/провал блоки никогда не работает.

Как я могу войти на facebook без входа в систему?

Заранее спасибо.

ответ

1

Первая часть вашего кода не будет работать, запись в mainBundle невозможна, так как она только для чтения на устройстве.

Секунда секунд может завершиться неудачей, так как первая часть вашего кода не работает.

Просто добавьте эту проверку в вашем коде, если файл на самом деле написано:

// write back to file 
if (![dict writeToFile:path atomically:YES]) { 
    NSLog:(@"Failed to write: %@", path); 
} 
+0

но я вижу Info.plist реально изменить. Почему так? – gran33

+0

@ gran33 вы тестируете его в симуляторе? Потому что на реальном устройстве вы не можете писать в основной комплект. – rckoenes

+0

есть, на реальном устройстве. Я пишу на этой строке: [dict writeToFile: путь атомарно: ДА]; – gran33