gpt4 book ai didi

ios - facebook ios sdk - 使用 UIImage 发布照片时遇到问题

转载 作者:技术小花猫 更新时间:2023-10-29 11:01:31 25 4
gpt4 key购买 nike

对于如何处理我在 Facebook 上发布图片时遇到的问题,如果有任何建议,我将不胜感激。

下面的代码正如我所期望的那样工作:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"http://myserver/img.png", @"picture",
@"My Testing", @"name",
@"Enter some text...", @"message",
nil];

[appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];

但是,我真的很想使用从相机拍摄的图像。我已经在我的应用程序中设置了代码来执行此操作,并将图像显示在屏幕上。所以,我试着这样做:

CGRect contextRect  = CGRectMake(0, 0, 320, 436);
UIGraphicsBeginImageContextWithOptions(contextRect.size, YES, 1);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

我已经测试了这段代码,newImage 是一个有效的 UIImage,我可以按照预期放置和操作它。但是,当我尝试将其集成到 Facebook 对话框中时,如下所示:

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
newImage, @"picture",
@"My Testing", @"name",
@"Enter some text...", @"message",
nil];

[appDelegate.facebook dialog:@"feed" andParams:params andDelegate:self];

我在控制台中收到了这两条荒谬的消息:-[UIImage 长度]: 无法识别的选择器发送到实例 0x1c9420CoreAnimation:忽略异常:-[UIImage 长度]:发送到实例 0x1c9420 的无法识别的选择器

因此,作为测试,我想尝试将图像导入我的项目并直接访问它。这是我在第一个示例中在线引用的确切图像,所以我知道它应该可以工作。但即使我尝试这样做:

UIImage *newImage = [UIImage imageNamed:@"BaB.png"];

我收到与上面相同的错误消息。

我在 Facebook 文档中看到“图片”键应该使用图像的 URL。但我在网上看到一些示例表明人们正在使用 UIImage 而不仅仅是 URL。

显然,我做错了什么,但我不知道它可能是什么。

对于如何进行的任何指示,我将不胜感激。

最佳答案

概述过程的总结答案...关键是在图形调用中包含 access_token,因为 facebook-ios-sdk 不会自动执行此操作:

1)更新到最新的facebook-ios-sdk。
2)用app id实例化。



self.facebook = [[Facebook alloc] initWithAppId:kApplicationFBID];

3) 授权应用包括publish_stream



NSArray * neededPermissions = [[[NSArray alloc] initWithObjects:@"user_about_me", @"publish_stream", @"user_photos", nil] autorelease];
[facebook authorize:neededPermissions delegate:appDelegate];

4) 确保应用委托(delegate) fBDidLogin 捕获访问 token 和过期时间并将其存储在用户默认设置中(用于以后优化登录过程)。



-(void)fbDidLogin {
DebugLog(@"New Access Token: %@", [facebook accessToken] );
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}

5) 确认有效的访问 token (非零且未过期)...否则按照上述重新授权应用。
6) 将图像捕获到 UIImage 并调用它,注意 access_token 的关键添加。这将自动为您的应用程序创建一个相册,并将图像放在那里并根据我的测试将其张贴在墙上。

<p></p>

<pre><code>-(void)postImageToAlbum:(UIImage *)image {
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
image, @"source",
@"caption desc", @"message",
nil];
[facebook requestWithGraphPath:[NSString stringWithFormat:@"/me/photos?access_token=%@", self.facebook.accessToken]
andParams:params andHttpMethod:@"POST" andDelegate:self];
}
</code></pre>

<p></p>
7) 在 FBRequestDelegate 方法中检查 id 结果



-(void)request:(FBRequest *)request didLoad:(id)result {
NSLog(@"Request didLoad: %@ ", [request url ]);
if ([result isKindOfClass:[NSArray class]]) {
result = [result objectAtIndex:0];
}
if ([result isKindOfClass:[NSDictionary class]]){

}
if ([result isKindOfClass:[NSData class]]) {
}
NSLog(@"request returns %@",result);
}

8) 不要使用测试用户帐户进行测试...目前它会授权测试帐户并提供访问 token ,但当您尝试使用图形 API 时,它会返回意外错误。如果您在 dev.facebook.com 中使用网络版本与 native 应用程序设置,您可能没问题,因为据说您可以创建测试用户并将他们与应用程序相关联,但我还没有尝试过。

祝你好运!

关于ios - facebook ios sdk - 使用 UIImage 发布照片时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6637514/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com