gab*_*ino 0 facebook objective-c ios
使用新的Facebook SDK 3.1和iOS 6,有2种(实际上3种)发布方式.
(似乎新趋势是有更多的选择让它变得更简单?)OMG !!
这是一个:
SLComposeViewController *fbPost = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbPost addURL:[NSURL URLWithString:href]];
[self presentViewController:fbPost animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)
这是使用原生对话框的另一种方式:
[FBNativeDialogs presentShareDialogModallyFrom:self
initialText: nil
image: nil
url: [NSURL URLWithString:href]
handler:^(FBNativeDialogResult result, NSError *error) {
if (error) {
}
else
{
switch (result) {
case FBNativeDialogResultSucceeded:
break;
case FBNativeDialogResultCancelled:
break;
case FBNativeDialogResultError:
break;
}
}
}];
Run Code Online (Sandbox Code Playgroud)
我们开发人员认为这很酷,因为我们为用户提供了一个很好的功能,也因为我们的应用名称出现在帖子中,可以对应用进行一些推广.
有趣的是,最新的实现不允许指定应用程序名称是发布,名称出现在'via'之后.
我尝试过使用SLRequest:
ACAccountStore *store = [[ACAccountStore alloc] init];
ACAccountType *fbType = [store accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
(options)[@"ACFacebookAppIdKey"] = kFacebookAppID;
(options)[@"ACFacebookPermissionsKey"] = @[@"publish_stream"];
(options)[@"ACFacebookAudienceKey"] = ACFacebookAudienceFriends;
[store requestAccessToAccountsWithType:fbType options:options completion:^(BOOL granted, NSError *error) {
if(granted) {
// Get the list of Twitter accounts.
NSArray *fbAccounts = [store accountsWithAccountType:fbType];
NSMutableDictionary *params = [[NSMutableDictionary alloc] init];
(params)[@"link"] = href;
// (params)[@"picture"] = picture;
// (params)[@"name"] = name;
(params)[@"actions"] = @"{\"name\": \"Go Gabi\", \"link\": \"http://www.gogogabi.com\"}";
//Set twitter API call
SLRequest *postRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST
URL:[NSURL URLWithString:@"https://www.facebook.com/dialog/feed"] parameters:params];
//Set account
[postRequest setAccount: [fbAccounts lastObject]];
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
if(error)
{
NSLog(@"%@", error.description);
}
else
{
NSLog(@"%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
}
}];
} else {
}
}];
Run Code Online (Sandbox Code Playgroud)
不幸的是,分享这个名字并不是那么简单,我想知道为什么以及谁在设计新的实现...我希望能得到一些帮助,感谢提前.
我试着让我的问题变得有趣,因为在如此微不足道的话题中花费时间太闷了......
当你使用它时SLComposeViewController,它实际上是系统向你呈现他们的控制器,而且是使用post按钮发送的用户.因此在Facebook上它显示为"通过iOS".
没有办法改变这一点.
使用Facebook SDK 3.1,它还使用iOS 6本机集成,所以当你FBNativeDialogs在iOS 6上调用它时,它正在使用SLComposeViewController.
Facebook继续开发他们的SDK,因为他们提供了几个很好的模块来使用"开箱即用" - 这包括朋友列表选择器等......但我相信Facebook继续支持他们的SDK以实现向后兼容的最大原因.如果您不在iOS 6上,它会回到它的库中,如果你在iOS 6上,它会使用系统集成.
Facebook是一件大事,现在可以使用它,很多开发人员都会使用它,就像Twitter去年的整合一样.问题当然是在这一点上,开发人员可以选择删除旧的iOS支持,或者......有很多重复的代码,在他们检查的意义上,SLComposeViewController如果它不可用(iOS 5),那么使用旧的Facebook SDK ...你可以想象这会如何变得非常混乱很快.
因此,Facebook SDK(3.1)正在使用iOS系统Facebook集成(如果可用),或者如果没有,它是自己的.简而言之,除非你真的想要Facebook SDK的好东西(朋友纠察队员的名字),并且你不打算支持iOS <6,那么你不需要担心他们的SDK,只需使用社交框架.
那么,回到你的问题,有3种方式发布到Facebook?实际上考虑到我提到的内容,iOS 6中有两种方式:SLComposeViewController或者,SLRequest.在较旧的iOS版本中,只有1:Facebook SDK.
由于它SLComposeViewController是由系统拥有的,而不是您的应用程序,因此它将始终作为"通过iOS"共享.
另一方面,SLRequest将显示您的应用程序名称.当您为自己指定一个帐户时SLRequest,该帐户是通过ACAccountStore传递一些选项获得的ACFacebookAppIdKey,其中包括用于确定您的Facebook应用名称以作为帖子的一部分发布到用户Feed上.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
1601 次 |
| 最近记录: |