rob*_*ure 16 facebook facebook-ios-sdk ios6
这个问题与iOS SDK设备上的iOS SDK非常相似,但由于我无法在那里发表评论,我提出了一个新问题.我认为问题不一样:
当我尝试更新我的应用程序的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];
}
Run Code Online (Sandbox Code Playgroud)
但它永远不会被称为!不应该被称为?我按照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];
}];
}
Run Code Online (Sandbox Code Playgroud)
我也试过了
openActiveSessionWithReadPermissions与nil用于权限与意向重新授权购买所述许可publish_actions facebook的教程示例.相同的结果: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){
}
}];
}
}
Run Code Online (Sandbox Code Playgroud)
在尝试打开会话之前,我从未在我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
与ios 5上的facebook 3.0我从未遇到过问题所以我的脸书应用程序设置正确.我真的很感激任何帮助wchich使我能够打开facebook会话,没想到用facebook 3.1遇到这些问题而且文档在这一点上没有帮助我,thx
Joh*_*hnG 40
我有同样的问题,因为我忘记了实施
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [FBSession.activeSession handleOpenURL:url];
}
Run Code Online (Sandbox Code Playgroud)
在我的AppDelegate中
jzn*_*jzn 19
虽然JohnG的答案是正确的,但现在已弃用该特定委托方法.要使用的正确委托方法是:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [FBSession.activeSession handleOpenURL:url];
}
Run Code Online (Sandbox Code Playgroud)
将它放在我的应用程序委托中为我解决了这个问题.如果没有这个,iOS 6.0本机登录将起作用,但Facebook应用程序登录将失败.
即使我无法发表评论,所以将其写为答案。我不确定,让我分析一下潜在的原因 1)你说:“但它从未被调用!不应该被调用吗?” - 为了
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
Run Code Online (Sandbox Code Playgroud)
要被调用,在 info.plist 文件中,应该正确设置 url 方案,即转到 URL 类型-->Item0-->URL 方案--->Item 0 这里的值应该是 fbAPPID ,即 fb 附加您的实际 facebookappID [FacebookAppID 也可以出现在 info.plist 中或硬编码在代码中]。
2)你说:“sessionStateChanged回调总是以FBSessionStateClosedLoginFailed结束”
在 sessionStateChanged 开关方法中检查会话的状态,如果已创建或createdTokenLoaded,则尝试打开会话。
注意:[FBSession openActiveSessionWithPublishPermissions ....] 这是一个静态方法,将创建一个新会话并设置为 FBSession.activeSession ,其中 openWithCompletionHandler 是一个实例方法,仅在会话已创建时才可以工作。
case FBSessionStateCreated:
case FBSessionStateCreatedTokenLoaded:{
[session openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
//handle the updating of views according to the sate of session
}];
break;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15730 次 |
| 最近记录: |