この質問はiOS 4.0 デバイスの Facebook SDK for iOSと非常によく似ていますが、そこではコメントできないので、新しい質問を開きます。質問は同じではないと思います:
アプリの facebook 統合を facebook 3.1 に更新しようとすると、facebook セッションで sessionStateChanged コールバックを開くことができず、常に 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
facebook チュートリアルの例のようにパーミッションを使用しnil
て、後で 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);
}
}
iOS 5 の facebook 3.0 では問題が発生したことがないので、facebook アプリは正しく設定されています。Facebookセッションを開くだけで、Facebook 3.1でこれらの問題に遭遇するとは思わなかったので、ドキュメントはこの時点で私を助けてくれません.thx