этот вопрос очень похож на Facebook SDK для iOS, на устройстве iOS 4.0, но, поскольку я не могу комментировать там, я открываю новый вопрос. Я думаю, что вопросы не совпадают:
При попытке обновить интеграцию facebook моего приложения с facebook 3.1 я не получаю сеанс facebook, чтобы открыть sessionStateChanged Callback всегда заканчивается в FBSessionStateClosedLoginFailed. в моей настройке у меня есть обратный вызов в моем appdelegate
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// attempt to extract a token from the url
// return [self.session handleOpenURL:url];
return [FBSession.activeSession handleOpenURL:url];
}
но он никогда не называется! не следует ли его вызвать? Я следил за документацией на facebook и звонил
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil];
return [FBSession openActiveSessionWithPublishPermissions:permissions
defaultAudience:FBSessionDefaultAudienceFriends
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
Я также пробовал
openActiveSessionWithReadPermissions
с nil
для разрешений, как в примере с учебником для facebook, с целью позже повторного авторизации для разрешения publish_actions. тот же результат: FBSessionStateClosedLoginFailed снова.
Я даже пробовал звонить
ACAccountStore *accountStore;
ACAccountType *accountTypeFB;
if ((accountStore = [[ACAccountStore alloc] init]) &&
(accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook] ) ){
NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];
id account;
if (fbAccounts && [fbAccounts count] > 0 &&
(account = [fbAccounts objectAtIndex:0])){
[accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {
//we don't actually need to inspect renewResult or error.
if (error){
}
}];
}
}
прежде чем пытаться открыть сеанс, но я никогда не открываю его на своем устройстве ios6 (iphone 4s). в приложении меня просят разрешения, но потом ничего не происходит, потому что сессия всегда имеет состояние FBSessionStateClosedLoginFailed! мой обратный вызов для состояния сеанса
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
if (!error) {
// We have a valid session
NSLog(@"User session found");
}
break;
case FBSessionStateClosed:
NSLog(@"FBSessionStateClosed");
case FBSessionStateClosedLoginFailed:
NSLog(@"FBSessionStateClosedLoginFailed");
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
[[NSNotificationCenter defaultCenter]
postNotificationName:FBSessionStateChangedNotification
object:session];
if (error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"facebook Hinweis"
message:@"facebook Login nicht möglich, bitte versuchen Sie es erneut."
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
NSLog(@"Facebook session error: %@", error.localizedDescription);
}
}
с facebook 3.0 на ios 5 У меня никогда не было проблемы, поэтому мое приложение facebook настроено правильно. Я был бы очень признателен за любую помощь, которая позволила бы мне просто открыть сеанс facebook, не думал, что столкнется с этими проблемами с facebook 3.1, и документы не помогут мне на этом этапе, спасибо