Iphone Facebook总是在每次应用发布时重新授权?
我最近在我的应用程序中添加了Facebook集成,除了用户重新启动应用程序外,一切正常。每次重新启动应用程序时,Facebook都必须返回其授权过程。这包括从应用程序切换到Safari/Facebook,然后返回到我的应用程序。我怎样才能让Facebook保存信息,或者获得我的应用程序的全面权限,这样我就不会不断地重新授权 以下是我在ApplicationIDFinishLaunchingWithOptions:method中的代码: 相关Facebook委托方法:Iphone Facebook总是在每次应用发布时重新授权?,iphone,facebook,facebook-graph-api,Iphone,Facebook,Facebook Graph Api,我最近在我的应用程序中添加了Facebook集成,除了用户重新启动应用程序外,一切正常。每次重新启动应用程序时,Facebook都必须返回其授权过程。这包括从应用程序切换到Safari/Facebook,然后返回到我的应用程序。我怎样才能让Facebook保存信息,或者获得我的应用程序的全面权限,这样我就不会不断地重新授权 以下是我在ApplicationIDFinishLaunchingWithOptions:method中的代码: 相关Facebook委托方法: - (void)fbDidL
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
- (void) requestDialogButtonClicked {
NSMutableDictionary* params =
[NSMutableDictionary dictionaryWithObjectsAndKeys:
@"invites you to check out cool stuff", @"message",
@"Check this out", @"notification_text",
nil];
[facebook dialog:@"apprequests"
andParams:params
andDelegate:self];
}
- (void)dialogDidComplete:(FBDialog *)dialog {
NSLog(@"dialog completed successfully");
}
你在给Facebook打电话吗?这就是fbDidLogin将被触发的方式。假设您是,该行为表示令牌或日期或两者都为零,或者日期不太可能过期
在写入和读取用户默认值时记录这些值。我的猜测是,由于应用程序密钥或代码中未显示的其他问题,授权未被调用或失败,导致fbDidLogin方法未调用或保存零值。这是因为您在授权应用程序时没有请求权限。。离线访问提供了一个长期访问令牌,因此您无需每次用户想要使用Facebook时都获得一个新的访问令牌。。那么你需要什么来像这样授权你的应用呢
if (![facebook isSessionValid]) {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_likes",
@"read_stream",
@"offline_access"
nil];
[facebook authorize:permissions];
[permissions release];
}
编辑:
请在您的实施中检查以下内容:
1.您需要在应用程序Delegated中添加以下函数此处的Facebook对象是您的Facebook类实例值
// Pre 4.2 support
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [facebook handleOpenURL:url];
}
// For 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [facebook handleOpenURL:url];
}
2.在您的info.plist中,添加到URL类型>URL方案>带有fb前缀的Facebook应用程序ID。最后,对于fb313714***,您的值将如下所示。正在使用非零值调用Authorize。然而,fbDidLogon从未被调用。我在authorize调用和fbdilogon方法上都设置了一个断点,但在第一个断点之后,第二个断点没有命中。请参见@Malek_Jundi的注释。您一定收到了错误回调。在那里实现didNotLogin方法和NSLog。用户实际上不必重新允许访问,所发生的只是我的应用程序切换到Facebook,在短时间加载后,立即切换回。这真奇怪!你确定正在调用fbDidLogin吗?不,不是。应该在调用authorize后调用,对吗?是的。。所以你的问题是你的应用程序从未被授权!因为它每次都会打开fb,如果调用它,确定检查此方法-voidfbDidNotLogin:BOOLcancelled;它是!这意味着什么?
// Pre 4.2 support
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [facebook handleOpenURL:url];
}
// For 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [facebook handleOpenURL:url];
}