【问题标题】:Posting photos to Facebook fan page with iOS SDK使用 iOS SDK 将照片发布到 Facebook 粉丝页面
【发布时间】:2011-05-14 15:50:30
【问题描述】:

我正在尝试使用 iOS SDK 和图形 API 将照片上传到我拥有的 Facebook 页面。我已经能够将照片上传到我自己的墙上。我还能够以管理员身份在我的粉丝页面墙上发布一条消息,并在我的粉丝页面上创建一个相册,所以我认为我打对了电话,但没有成功。

这就是我目前正在做的事情。

我正在登录使用

Facebook *fb = [[Facebook alloc] init];
self.facebook = fb;
[fb release];
NSArray *permissions =  [[NSArray arrayWithObjects:@"read_stream", @"offline_access", @"publish_stream", @"manage_pages", @"user_photos", @"friends_photos",nil] retain];
[facebook authorize:FB_APP_ID permissions:permissions delegate:self];
[permissions release];

登录后,我请求帐户

[facebook requestWithGraphPath:@"/me/accounts" andDelegate:self];

这些帐户连同我拥有的每个页面和应用程序的访问令牌一起返回给我。我使用一个简单的循环来解析帐户,以额外提供为我希望上传照片的页面提供的 access_token。

然后我将我的 facebook 对象的访问令牌设置为新的 access_token。

facebook.accessToken = new_accessToken;

并尝试使用我的粉丝页面上传照片

UIImage *uploadImage = [UIImage imageNamed:@"t200.jpg"];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
               uploadImage, @"source", 
             @"test caption", @"message",             
             nil];


[facebook requestWithGraphPath:@"/me/photos" andParams:params
        andHttpMethod:@"POST" andDelegate:self];

我收到的回复是

{"error":{"type":"OAuthException","message":"(#1) 发生未知错误"}}

这是 facebook 图形 API 中的错误吗?我还尝试使用标准 HTTPS 请求进行此调用,并得到相同的结果。

【问题讨论】:

    标签: ios objective-c facebook facebook-graph-api


    【解决方案1】:

    Ater成功登录Facebook后,可以通过请求@"/me/accounts"获取list FanPage,并通过向@"/FBFanPageID?fields=access_token"请求迭代到你想要的粉丝页面并请求其accessToken

    此 accessToken 与您的 facebook.accesstoken 不同。

    获取fanPage accessToken后,设置为facebook accessToken by

    [_facebook setAccessToken:_accessTokenForFanPage]; // 这是 necc 步骤

    现在你可以通过@"/FBFanPageID/photos"上传到fanPage墙

    请求@"/FBFanPageID/albums"的fanPage相册

    上传到@"/AlbumsID/photos"的特定专辑

    为了上传这些图像参数字典将被使用。

    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: IMAGE,@"source", IMAGECAPTION,@"message",
    nil];

    【讨论】:

      【解决方案2】:

      旧消息,但...不确定粉丝页面部分,但您需要在“/me/photos”之后添加“?access_token=...”或您最终使用的图形 API 以通过未知错误。 facebook sdk 不会自动添加访问令牌,所以你必须自己做。

      [facebook requestWithGraphPath:[NSString stringWithFormat:@"/me/photos?access_token=%@", facebook.accessToken] andParams:params andHttpMethod:@"POST" andDelegate:self];

      【讨论】:

      • 如果您查看 SDK 中提供的 Facebook.m,您会看到 SDK 将 access_token 添加到参数中。但是,需要为粉丝页面获取不同的 access_token。
      【解决方案3】:

      我有非常相似的代码并且它可以工作,唯一略有不同的是我在 AppDelegate 中创建 Facebook 实例..

      QRSMAppDelegate *delegate = (QRSMAppDelegate *)[[UIApplication sharedApplication] delegate];

      if (![[delegate facebook] isSessionValid]) {
          [[delegate facebook] authorize:permissions];
      

      和你一样,我最初在视图控制器中创建了 Facebook 实例,结果出现了很多奇怪的错误。问题(我后来发现)是...... Facebook 通过将 URL 传递给 Facebook 类实例来响应,并且从外部到您的应用程序的唯一入口点是应用程序委托。 (查看 Facebook sdk 示例应用程序 Hackbook)!

      -(BOOL)应用程序:(UIApplication *)应用程序 openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication 注释:(id)注释{

      BOOL ret = [facebook handleOpenURL:url];
      

      .... 返回(返回); }

      这里的问题当然是如果我只在我的应用程序的一小部分中使用 Facebook 并且远离应用程序委托(Facebook 实例化要求您声明委托!

      在传递 url 时遇到同样复杂的问题,实际上在应用程序委托中分配初始化视图控制器(Facebook 委托)并将其传递到视图层次结构更容易。

      【讨论】:

        【解决方案4】:

        对此不确定,因为我对 FB iOS 集成还很陌生,但我认为您不应该使用 me/photos 而是 xyz/photos,其中 xyz 是您要发布到的页面的 ID。

        【讨论】:

        • 我已经用页面 id 试过了,但还是不行。使用我似乎是正确的,因为当您更改访问令牌时,您访问的内容。所以我访问了你的粉丝页面。
        【解决方案5】:

        您可以向您的粉丝页面发送电子邮件,并让附加的照片显示出来,就像管理员发布的一样。

        在您的粉丝页面上,选择编辑页面,然后选择移动设备。 在移动页面上,Facebook 会向您显示一个电子邮件地址,您可以使用它来发布到您的粉丝页面。

        在 iOS 中,我使用 http://code.google.com/p/skpsmtpmessage/ 发送电子邮件

        你必须使用这个...

        svn checkout http://skpsmtpmessage.googlecode.com/svn/trunk/skpsmtpmessage-read-only

        下载代码

        除了主题行中的内容外,请勿在电子邮件中包含任何文本。否则不会发帖。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-07-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-25
          相关资源
          最近更新 更多