- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我在 StackOverflow 上的第一篇文章,但我已经使用了很长时间...
我的问题基本上很简单,我想把一个UITextView(mShareText)
的内容分享到用户的墙上,不提示任何Dialog。基本上,用户必须在 UITextView
上填写消息,然后单击“post”UIButton。是不是很简单?
我已经下载了 Facebook iOS SDK 并将其复制到我的项目中。我在 Controller 的头文件中包含了“FBConnect.h
”和“Facebook.h
”,并创建了一个 var:Facebook* facebook
; , Controller 还实现了以下委托(delegate):FBSessionDelegate、FBRequestDelegate。
在我的 Controller 的实现文件中,当用户点击“发布”UIButton 时,我触发了一个 IBAction。
- (IBAction)onShareByFBPressed:(id)sender {
NSLog(@"onShareByFBPressed");
// Facebook settings
NSMutableDictionary* params = [[NSMutableDictionary alloc] initWithCapacity:3];
[params setObject:mShareText.text forKey:@"message"];
[params setObject:@"http://www.example.com" forKey:@"link"];
[params setObject:@"https://www.example.com/myImg.jpg" forKey:@"picture"];
[facebook requestWithGraphPath:@"me/feed"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
[params release];
}
我已经在我的 viewdidload 上实现了这个:
- (void)viewDidLoad
{
NSLog(@"viewDidLoad");
[super viewDidLoad];
(...)
// Test facebook
facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXX" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
NSLog(@"AccessToken: %@ ExpirationDate: %@", facebook.accessToken, facebook.expirationDate);
}else{
NSLog(@"No AccessToken or ExpirationDate");
}
if (![facebook isSessionValid]) {
[facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil]];
}
}
由于代表的缘故,我必须实现不同的方法:
// 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];
}
- (void)fbDidLogin {
NSLog(@"fbDidLogin");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
- (void)fbSessionInvalidated{
NSLog(@"fbSessionInvalidated");
}
- (void)fbDidLogout{
NSLog(@"fbDidLogout");
}
- (void)fbDidExtendToken:(NSString*)accessToken expiresAt:(NSDate*)expiresAt{
NSLog(@"fbDidExtendToken");
}
- (void)fbDidNotLogin:(BOOL)cancelled{
NSLog(@"fbDidNotLogin");
}
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response{
NSLog(@"didReceiveResponse: %@", response);
}
- (void)request:(FBRequest *)request didFailWithError:(NSError *)error{
NSLog(@"didFailWithError: %@", [error description]);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Share on Facebook"
message:@"An error occured"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
不幸的是,每次我尝试触发我的“onShareByFBPressed”方法时,我都会在日志中收到以下错误:
2012-02-17 13:02:06.401 Mixtapes[935:707] didFailWithError: Error Domain=facebookErrDomain Code=10000 "The operation couldn’t be completed. (facebookErrDomain error 10000.)" UserInfo=0x1f6f60 {error=<CFBasicHash 0x1f6660 [0x3ec6d630]>{type = mutable dict, count = 3,
entries =>
2 : <CFString 0x1f64a0 [0x3ec6d630]>{contents = "type"} = <CFString 0x1f6b10 [0x3ec6d630]>{contents = "OAuthException"}
3 : <CFString 0x1f6ab0 [0x3ec6d630]>{contents = "message"} = <CFString 0x1f6a10 [0x3ec6d630]>{contents = "An active access token must be used to query information about the current user."}
6 : <CFString 0x1f6e60 [0x3ec6d630]>{contents = "code"} = 2500
}
}
谁能告诉我我的实现有什么问题??
非常感谢。
最好的问候。
编辑:@阿迪尔
感谢您的建议。它有时确实有效。
有时我会收到以下错误:
didFailWithError: Error Domain=facebookErrDomain Code=10000 "The operation couldn’t be completed. (facebookErrDomain error 10000.)" UserInfo=0xa17e0d0 {error=<CFBasicHash 0xa171e10 [0x3ec6d630]>{type = mutable dict, count = 3,
entries =>
2 : <CFString 0xa179d10 [0x3ec6d630]>{contents = "type"} = <CFString 0xa17a280 [0x3ec6d630]>{contents = "OAuthException"}
3 : <CFString 0x6127710 [0x3ec6d630]>{contents = "message"} = <CFString 0xa178db0 [0x3ec6d630]>{contents = "Error validating access token: Session is invalid. This could be because the application was uninstalled after the session was created."}
6 : <CFString 0xa17e020 [0x3ec6d630]>{contents = "code"} = 190
}
}
谢谢你的帮助
最佳答案
这里的问题是:
授权的facebook是AppDelegate
的facebook对象,不是你的ViewController
的facebook。
解决方案:
而是为每个 ViewController
或您需要的地方分配新的 Facebook
对象。您应该为您的应用程序创建一个属性 delegate
。像这样:
在appDelegate.h中
@property(nonatomic, retain) Facebook *facebook;
并在 appDelegate.m 中综合它,现在将 Facebook 的初始化放在
- (BOOL)application:(UIApplication *)ap didFinishLaunchingWithOptions:(NSDictionary *)op
{
// other code....
facebook = [[Facebook alloc] initWithAppId:@"XXXXXXXXXXX" andDelegate:self];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
NSLog(@"AccessToken: %@ ExpirationDate: %@", facebook.accessToken, facebook.expirationDate);
}else{
NSLog(@"No AccessToken or ExpirationDate");
}
return true;
}
现在你想在哪里使用它,写这样的东西:
- (void)viewDidLoad
{
[super viewDidLoad];
//...
AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplication] delegate];
facebook = app.facebook;
if (![facebook isSessionValid]) {
[facebook authorize:[NSArray arrayWithObjects:@"publish_stream", nil]];
}
}
关于ios - 在 iOS 上使用 Facebook 图谱 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9328001/
Facebook今天发布了事件页面的新设计(http://allfacebook.com/testing-new-layout-for-events_b111326) 有什么方法可以访问封面网址并使用
这个问题在这里已经有了答案: What's the Facebook's Graph API call limit? (5 个答案) 关闭 5 年前。 我已经研究并得出结论,Facebook Gra
我刚开始使用 Facebook,老实说,我发现它非常令人困惑,术语和文档在很多情况下似乎非常模糊。有人可以用简单的英语解释我如何实现以下目标吗? 将图片发布到 Facebook(在用户页面上),然后检
有人有关于如何使用 Android Graph API 的示例吗? 我受困于基础知识,例如在 Facebook 上将文本发布到墙上。 我正在使用适用于 Android 的 Facebook SDK。这
我的任务是使用 Instagram Graph API 获取我的商业 Instagram 帐户的照片数据。我按照 Instagram Graph API 的说明进行操作 - https://devel
我正在使用 Facebook Graph API我想知道哪些字段可用于 &fields 参数,以及在哪里可以找到有关这些字段的文档。 我只能在文档中找到 &type 参数的搜索类型,例如 page 搜
我曾经使用 Facebook 的 PHP 在我的应用程序中返回 RSS 提要。现在已弃用。在 Facebook 开发者页面上它说 “页面 RSS Feed 端点 - 位于 https://www.fa
尝试了以下端点: https://graph.facebook.com/v2.6/{video-id}/video_insights/total_video_views?access_token={t
Facebook 发布了其著名图形 API 的新版本,我认为 https://developers.facebook.com/ 提供的文档很困惑。我实际上正在开发一个需要 facebook 连接的应用
这是我在 StackOverflow 上的第一篇文章,但我已经使用了很长时间... 我的问题基本上很简单,我想把一个UITextView(mShareText)的内容分享到用户的墙上,不提示任何Dia
我正在尝试为此issue 提供关联ID但我不确定如何获得它。我想应该是回应,对吗?可能是 client-request-id 吗? HTTP 响应 HTTP/1.1 403 Forbidden Cac
我正在尝试使用 this 集成 Facebook android sdk|关联。一切运行完美,除了我在尝试为已登录用户获取 email 时收到一个 JSONException。 下面是我得到的logc
我想显示我在单独网页上发布的公共(public) Facebook 事件列表,以便更轻松地保持更新 - 只需更新 Facebook,下次调用图形 API 就会显示我当前的事件。 我已经在页面上运行了
我正在尝试在我的 Android 应用程序中添加访问 friend 列表的额外权限,有很多关于旧 API 图的资源,但找不到新 API 的任何内容,所以我尝试向数组添加新权限,但没有成功'无法正常工作
根据 Facebook 的 Graph API 文档 (here),您可以通过以下 URL 访问用户个人资料图片的各种尺寸: https://graph.facebook.com/(userid)/p
想象一下当我以 userA 身份登录 facebook web 应用程序时的情况。我知道 userB 的昵称,但他不在我的好友列表中,我也不知道他的 ID。当然,他不使用我的应用程序。 如何通过昵称获
对于我的测试用户,我可以获得的访问 token 始终具有相同的范围: public_profile, basic_info, user_friends 我没有找到修改测试用户在界面中或通过 API 调
我知道一旦我拥有访问 token 就可以显示公共(public)图像,但我该如何获取它?我发现 facebook 开发文档在扩展权限方面有点令人困惑。 我是否需要以某种方式将图片库/作品集注册为应用程
我是一名优秀的程序员,十分优秀!