使用Open Graph在iOS上使用Facebook SDK创建相册

3

我需要使用Facebook SDK在iOS上创建一个新的相册。我的代码之前是可以工作的,但最近出现了类似以下错误的问题:

{
    "com.facebook.sdk:ErrorSessionKey" = "<FBSession: 0x7290850, state: FBSessionStateOpenTokenExtended, loginHandler: 0x7290c40, appID: 380841565285975, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x8a933e0>, expirationDate: 4001-01-01 00:00:00 +0000, refreshDate: 2013-10-14 03:16:01 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(\n    \"create_note\",\n    \"basic_info\",\n    \"share_item\",\n    \"status_update\",\n    \"publish_actions\",\n    \"video_upload\",\n    email,\n    \"photo_upload\",\n    installed,\n    \"publish_stream\",\n    \"user_birthday\",\n    \"user_location\"\n)>";
    "com.facebook.sdk:HTTPStatusCode" = 500;
    "com.facebook.sdk:ParsedJSONResponseKey" =     {
        body =         {
            error =             {
                code = 2;
                message = "An unexpected error has occurred. Please retry your request later.";
                type = OAuthException;
            };
        };
        code = 500;
    };
}

根据https://developers.facebook.com/docs/reference/api/errors/,代码为2的错误是:“服务器端问题;应用程序应等待一段时间后重试,最长时间由应用定义”。
这个问题已经至少持续了几天,但我似乎找不到其他人遇到类似的麻烦,所以我认为问题出在我身上。
有什么想法可能是原因吗?相关代码如下。 createFacebookAlbum方法是失败的。
- (void)shareToFacebook {
if (FBSession.activeSession.isOpen) {
    NSLog(@"SESSION IS OPEN");

    [self createFacebookAlbum];
} else {
    NSLog(@"SESSION IS NOT OPEN");
    NSArray* permissions = [NSArray arrayWithObject:@"email"];
    [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
        [self sessionStateChanged:session state:state error:error];

        if (error) {
            /* handle failure */
            NSLog(@"error:%@, %@", error, [error localizedDescription]);
            UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"There was a problem with your Facebook permissions." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
        }
        else if (state == FBSessionStateClosed || state == FBSessionStateClosedLoginFailed ) {
            [FBSession.activeSession closeAndClearTokenInformation];
        }
        else if (state == FBSessionStateOpenTokenExtended || state == FBSessionStateOpen) {
            if(!self.presentedFacebookSheet) {
                [self performSelector:@selector(reauthorizeAndContinuePostToFacebook) withObject:nil afterDelay:0.5];
                self.presentedFacebookSheet = YES;
            }
        }
        }];
    }
}

- (void)reauthorizeAndContinuePostToFacebook {
    NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil];

    [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *session, NSError *error) {
        [self shareToFacebook];
    }];
}

- (void)createFacebookAlbum {
    NSMutableDictionary* parameters = [NSMutableDictionary dictionary];
    [parameters setObject:@"Test name" forKey:@"name"];
    [parameters setObject:@"Test message" forKey:@"message"];

    FBRequest* request = [FBRequest requestWithGraphPath:@"me/albums" parameters:parameters HTTPMethod:@"POST"];

    NSLog(@"creating facebook album");
    FBRequestConnection *connection = [[FBRequestConnection alloc] init];
    [connection addRequest:request
         completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
             if (!error) {
                 NSString* albumId = [result objectForKey:@"id"];
                 NSLog(@"OK %@", albumId);
             }
             else {
                 NSLog(@"Error: %@",error.userInfo);
             }
         }];
    [connection start];
}

- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error {
    switch (state) {
        case FBSessionStateOpen:
        {
            [[FBRequest requestForMe] startWithCompletionHandler:
             ^(FBRequestConnection *connection,
               NSDictionary<FBGraphUser> *user,
               NSError *error) {
                 if (error) {
                     //error
                 }
                 else {
                     NSLog(@"User session found");
                 }
             }];
        }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }
}

你在出现这个问题之前改过 info.plist 吗?你尝试过移除 token(注销)并重新尝试吗? - Wain
不,这是一个存在于应用商店上的应用,我已经几个月没有碰过了。我也尝试过删除并重新安装该应用程序,但是没有成功。我甚至尝试使用不同的绑定 ID 和应用 ID…但是仍然没有成功。 - Ben Williams
1个回答

4

我遇到了和你一样的问题。 一个月前,我可以创建相册而不需要user_photos权限。

但是现在不行了。

我添加了user_photos权限,它又可以工作了。

请参考Facebook关于权限变更的文章:https://developers.facebook.com/docs/reference/api/album/


谢谢,问题已解决。我必须确保先注销用户,以便重新请求权限,但之后它就正常工作了。上面的文档链接仍然提到,要创建相册,您只需要 publish_actions 权限。但是,user_photos 权限绝对是必需的!祝您获得奖励,感谢您的帮助。 - Ben Williams

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接