我刚刚通过 ios 6 将 facebook 集成到我的应用程序中,但是在我的墙上发帖时遇到了问题。它只是说 “通过 ios 应用发布” .我想让它说 “通过应用名称发布” .我已经与 facebook 建立了一个应用程序标识,并且我有他们分配的应用程序编号,但我不确定如何将其与 facebook 集成进行集成。
下面是我的代码。如果有人可以提供帮助,将不胜感激。谢谢!
{
NSString *message;
message= [[NSString alloc] initWithFormat:@"I've earned %@ points", [self retrieveScore]];
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controller setInitialText:message];
[controller addURL:[NSURL URLWithString:@"http://mysite"]];
[self presentViewController:controller animated:YES completion:Nil];
[message release];
SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
NSString *output= nil;
switch (result) {
case SLComposeViewControllerResultCancelled:
output= @"Action Cancelled";
NSLog (@"cancelled");
break;
case SLComposeViewControllerResultDone:
output= @"Post Succesfull";
NSLog (@"success");
break;
default:
break;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
[controller dismissViewControllerAnimated:YES completion:Nil];
};
controller.completionHandler =myBlock;
}
最佳答案
更新 - 可以做到
所以Digg for iOS应用程序无需使用帐户框架即可共享到 Facebook 以获取用户权限...他们使用 UIActivityViewController并将帖子显示为“通过 Digg”,我联系了 Digg 的某个人,他们告诉我这是一个手动过程,您必须在 Apple App Store 中发布您的 iOS 应用程序,并且还必须在 Facebook 中接受并发布您的 Facebook 应用程序应用商店。
那么 Facebook 就可以通过这种方式手动处理将两者链接起来。
明显的缺点是 UIActivityViewController这意味着您可以在不与 Facebook 任何集成的情况下从您的应用程序共享,不需要 Facebook 应用程序......但是要获得“通过您的应用程序名称”,您将需要一个 Facebook 应用程序,Facebook 将批准进入他们自己的应用程序商店,一旦一切就绪已上线,您需要联系开发人员关系以将其全部链接。
请注意,我的其余答案(我之前的答案)是正确的,解决方案是 Facebook 可以为您执行的手动过程,您的 iOS 代码不应该受到影响。
上一个答案和解决方法
您想要的原生 Facebook 集成实际上是 Composer View Controller 。这是通过使用 SLComposeViewController 获得的具有服务类型的类 SLServiceTypeFacebook .
该类(class)仅提供一种单向交流方式,正如您所注意到的,您是通过点击“发布”按钮来确认任何墙上帖子的人。这个 View Controller 归 iOS 系统所有,而不是你的应用。通过与这个 compose View Controller 交互,你实际上是在绕过你的应用程序。
用户喜欢这样做是因为它给了他们安全。
除非您的应用程序仅通过更深入的双向 Facebook 集成来运行,否则您应该使用 SLComposeViewController (更深入的集成意味着您的应用需要您的 friend 列表或现有的墙贴、相册等...)。
为了使源自您的应用程序的帖子以“通过 xxxx”而不是“通过 iOS”出现在 Facebook 上,您需要通过 SLRequest 与 Facebook 进行交互。类(class)。为此,您还必须与 Account.framework 互动。除了Social.framework .
在设置方面,它类似于之前使用(并且仍然可以使用)的 Facebook iOS SDK,您可以获得对设备帐户存储的引用,您请求 Facebook 帐户并发送您的 Facebook 应用程序 ID 和一系列权限.
如果获得批准,您可以通过 SLRequest 与 Facebook Graph API 进行交互。类(class)。通过在这个庄园的墙上张贴,您将拥有所需的“通过 xxx”。
要使用它,请查看 documentation for SLRequest .
请注意,在这种情况下,您有责任创建自己的撰写 View 。
您当然可以从 native UI 中激发自己的灵感,也可以查看 iPhoto 的 iOS 应用程序,尝试使用该应用程序分享到 Facebook,您会注意到它请求与您的 Facebook 帐户交互的权限(使用 SLComposeViewController 时不会发生这种情况) ,然后它呈现出非常接近 SLComposeViewController 的东西。用于 Facebook 帖子撰写。
但如果你仔细观察,你会发现它不一样。这也适用于 Twitter 及其 native 应用程序与 native 集成。他们有自己的撰写 View ,注意到他们使用原生 iOS 集成(Apple 框架)真的很有趣。我们知道这一点,因为转到“设置”>“隐私”>“Twitter”,您可以看到 Twitter 应用程序是使用设备上的 Twitter 帐户的授权应用程序。
Facebook 也是如此。
如果您没有获得许可,那么您将无法发布为您的应用程序 - 也就是“通过 myApp”。
抱歉让你失望了,我也一直在寻找一种方法来集成 ACAccount进SLComposeViewController但也找不到路。这是一种耻辱......因为 native 用户界面很甜蜜。
关于objective-c - 与 iOS 6.0 原生 Facebook 集成共享 : "Posted via my app name"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12547616/
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我正在编写一个gem,我必须在其中fork两个启动两个webrick服务器的进程。我想通过基类的类方法启动这个服务器,因为应该只有这两个服务器在运行,而不是多个。在运行时,我想调用这两个服务器上的一些方法来更改变量。我的问题是,我无法通过基类的类方法访问fork的实例变量。此外,我不能在我的基类中使用线程,因为在幕后我正在使用另一个不是线程安全的库。所以我必须将每个服务器派生到它自己的进程。我用类变量试过了,比如@@server。但是当我试图通过基类访问这个变量时,它是nil。我读到在Ruby中不可能在分支之间共享类变量,对吗?那么,还有其他解决办法吗?我考虑过使用单例,但我不确定这是
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我正在尝试从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
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel