Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone Facebook总是在每次应用发布时重新授权?_Iphone_Facebook_Facebook Graph Api - Fatal编程技术网

Iphone Facebook总是在每次应用发布时重新授权?

Iphone Facebook总是在每次应用发布时重新授权?,iphone,facebook,facebook-graph-api,Iphone,Facebook,Facebook Graph Api,我最近在我的应用程序中添加了Facebook集成,除了用户重新启动应用程序外,一切正常。每次重新启动应用程序时,Facebook都必须返回其授权过程。这包括从应用程序切换到Safari/Facebook,然后返回到我的应用程序。我怎样才能让Facebook保存信息,或者获得我的应用程序的全面权限,这样我就不会不断地重新授权 以下是我在ApplicationIDFinishLaunchingWithOptions:method中的代码: 相关Facebook委托方法: - (void)fbDidL

我最近在我的应用程序中添加了Facebook集成,除了用户重新启动应用程序外,一切正常。每次重新启动应用程序时,Facebook都必须返回其授权过程。这包括从应用程序切换到Safari/Facebook,然后返回到我的应用程序。我怎样才能让Facebook保存信息,或者获得我的应用程序的全面权限,这样我就不会不断地重新授权

以下是我在ApplicationIDFinishLaunchingWithOptions:method中的代码:

相关Facebook委托方法:

- (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]; 
}