我正在尝试从应用程序中实现类似页面的功能,我添加了最新的 Facebook SDK 并实现了所有委托(delegate)和处理程序来检查用户登录应用程序的 session 和状态。到这里它工作正常(这已经在示例代码中完成)。无论如何,我从 Facebook 开发者网站找到了以下代码,可以点赞一个页面,但它似乎不起作用。
- (void) likeFacebookIndia
{
NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject];
action[@"object"] = @"http://www.facebook.com/FacebookIndia";
//action[@"object"] = @"FacebookIndia";
[FBRequestConnection startForPostWithGraphPath:@"me/og.likes"
graphObject:action
completionHandler:^ (FBRequestConnection *connection,
id result,
NSError *error)
{
// handle the result
if(error)
{
NSLog(@"%@",error.localizedDescription);
}
else
{
NSLog(@"%@",result);
}
}];
}
成功登录后,我调用了上面的函数,结果在 likeFacebookIndia block 中出现以下错误,
The operation couldn’t be completed. (com.facebook.sdk error 5.)
在这里,我的问题是,
我不确定这是否是给页面点赞的正确方式?
如果它是正确的,那么我真正想通过的是什么?
还有其他办法吗?
我已经访问了 FacebookLikeView 和 FBLikeButton 的页面,这里也已经提出了很多问题,但似乎没有一个适用于最新的 Facebook SDK更新。
我可以用 FacebookLikeView 点赞一个页面,但这样做有很多问题,
UIKeyBoard 在点赞页面后出现 更新 我在 Graph API Explorer 上测试了同样的东西,结果如下,
{
“错误”: {
"message": "(#100) 此类对象尚不支持点赞操作。",
“类型”:“OAuthException”,
“代码”:100
}
}
更新 2
我确实侵入了 FacebookLikeView 类并解决了我编写的上述问题,尽管它现在应该可以工作了吧?不,它不起作用,因为它使用的是现在已经过时的 FBConnect,而且我还有最新的 Facebook SDK 用于其他工作很好的东西! 如果有人使用最新的 FacebookLikeView SDK 创建新项目,那就太好了。 [我已经在工作了!]
我就是这样
//Calling this function in `viewDidLoad`
- (void) addLikeView
{
facebookLikeView.delegate = self;
facebookLikeView.href = [NSURL URLWithString:@"http://www.facebook.com/FacebookIndia"];
facebookLikeView.layout = @"button_count";
facebookLikeView.showFaces = NO;
facebookLikeView.alpha = 0;
[facebookLikeView load];
}
#pragma mark - Facebook Delegate
-(void)sessionDoneForPageShare:(FBSession *)session state:(FBSessionState)state error:(NSError *)error
{
if(error)
{
NSLog(@"error : %@",error);
}
else
{
[facebookLikeView load]; //In logged in or logged out, we've to call this
}
}
- (void)facebookViewControllerCancelWasPressed:(id)sender
{
NSLog(@"Login was cancelled by user");
}
- (void)facebookViewControllerDoneWasPressed:(id)sender
{
NSLog(@"User tapped done button on login view");
}
- (void) checkFBloggedInStatus
{
if (!FBSession.activeSession.isOpen)
{
NSArray *permissions = [NSArray array];
[FBSession openActiveSessionWithPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceOnlyMe allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error){
[self sessionDoneForPageShare:session state:status error:error];}
];
}
}
#pragma mark FacebookLikeViewDelegate methods
- (void)facebookLikeViewRequiresLogin:(FacebookLikeView *)aFacebookLikeView {
[self checkFBloggedInStatus];
}
- (void)facebookLikeViewDidRender:(FacebookLikeView *)aFacebookLikeView {
[UIView beginAnimations:@"" context:nil];
[UIView setAnimationDelay:0.5];
facebookLikeView.alpha = 1;
[UIView commitAnimations];
}
- (void)facebookLikeViewDidLike:(FacebookLikeView *)aFacebookLikeView {
NSLog(@"liked");
}
- (void)facebookLikeViewDidUnlike:(FacebookLikeView *)aFacebookLikeView {
NSLog(@"unliked");
}
- (void)facebookLikeView:(FacebookLikeView *)aFacebookLikeView didFailLoadWithError:(NSError *)error
{
NSLog(@"FacebookLikeView error: %@",error);
}
有了这个,我可以看到点赞按钮,可以登录浏览器,但是什么也没有发生!每次都会显示“赞”按钮!
这在旧的 SDK FBConnect 上运行良好,问题出在最新的 Facebook SDK 上,
你可以找到 FacebookLikeView here ,
我错过了什么?
最佳答案
如果您看到这意味着,现在您不需要修补(或破解)任何东西来支持您的应用程序(Facebook 上的页面或任何 Open Graph 对象)。随着 Facebook iOS SDK (FacebookSDK.framework) 的最新版本,他们支持点赞按钮,但是(在我编写此更新时)它处于 beta 阶段,但我们有一些我们希望的东西很久以来,感谢 Facebook。
这里是更改日志和喜欢按钮的直接链接,也是文档。
解决方案: [推荐]
The Like button can be used to like a Facebook Page or any Open Graph object and can be referenced by URL or ID. Here's what the code looks like:
FBLikeControl *like = [[FBLikeControl alloc] init];
like.objectID = @"http://shareitexampleapp.parseapp.com/photo1/";
[self addSubview:like];
(来源:Documentation)。
老派方式 [不推荐]
终于,我能够解决我的问题了,我正在制定解决步骤,这对正在寻找这类东西的人来说真的很有帮助,
一些你可能需要知道的事情(来 self 的问题)
FacebookLikeView -- 您需要将 FBRequest 类替换为 FBConnect 中的其他名称,这样它就不会与最新的 SDK 冲突。我们开始吧
您如何知道用户是否喜欢这个特定页面?
您需要使用 Graph API 并检查用户的喜好。这是一个例子。
https://graph.facebook.com/{USER_ID}/likes/{PAGE_ID}
如果用户喜欢有问题的页面,如果用户喜欢该页面,它将返回如下所示的 JSON。
{
"data": [
{
"name": "SomeCafe",
"category": "Restaurant/cafe",
"id": "someIdWillCome",
"created_time": "2013-05-07T12:32:00+0000"
}
],
"paging": {
"next": "https://graph.facebook.com/me/likes/someIdWillCome?format=json&limit=5000&offset=5000&__after_id=someIdWillCome"
}
}
如果用户不喜欢该页面,则像这样:
{
"data": [
]
}
这是关于用户喜欢的文档: https://developers.facebook.com/docs/reference/api/user/#likes
实现
1) 按照其文档中的说明实现 FacebookLikeView。
2) 我需要执行一个 HTTP 请求来调用上面的 URL 以检查该页面的当前状态,因为我无法从 FacebookLikeView 获取它。 请记住,您需要与 access_token 一起执行 GET 请求。
3) 检查响应(接近上述示例)并根据需要执行操作!
这是我遇到的 FacebookLikeView 问题的解决方案
1) FacebookLikeView 消失了?
这是因为评论弹窗 Conceal 了它!下面是解决方案
在 FacebookLikeView.m 类中查找,- (void)didObserveFacebookEvent:(NSString *)fbEvent
并在末尾添加这些行,
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0f)
{
//NS_AVAILABLE_IOS(5_0);
[[_webView scrollView] setContentOffset: CGPointMake (0, 0)];
}
2) FacebookLikeView 显示 UIKeyboard!!
是因为点赞页面后的评论文本框焦点,下面是解决方法。
- (void) keyboardWasShown:(NSNotification *)notification
{
//force hide UIKeyBoard
[self.view endEditing:YES];
}
将通知添加到 viewDidLoad 到您实现的类中
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardWillShowNotification object:nil];
This will resign all keyboard visible from that particular view, in my case I'd no
UITextFieldwhere I need the Facebook Like Button, so if your case is difference then make sure with this point.
3) 缓慢加载 问题取决于 Facebook 服务器、互联网连接或其他东西的许多因素,所以我在其中添加了一个加载指示器 -- 它需要一些时间,但可以正常工作我要!
This will allow me like / unlike a Facebook page also I am able to know the current status of that particular user so I can decide what to do!
最后,感谢所有查看此问题并回复我的人!赞赏! :)
关于ios - 像按钮操作上的 Facebook 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16214839/
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我有一个rubyonrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我有一个.pfx格式的证书,我需要使用ruby提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o
我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption
我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?