【问题标题】:How to specify the app name user was using to post - (via app name) using SDK 3.1如何使用 SDK 3.1 指定用户用于发布的应用程序名称(通过应用程序名称)
【发布时间】:2012-10-12 11:39:09
【问题描述】:

使用新的 Facebook SDK 3.1 和 iOS 6,有 2 种(实际上是 3 种)发帖方式。

(似乎新趋势是有更多选择以使其更简单??)天哪!!

这是一个:

SLComposeViewController *fbPost = [SLComposeViewController      composeViewControllerForServiceType:SLServiceTypeFacebook];
[fbPost addURL:[NSURL URLWithString:href]];
[self presentViewController:fbPost animated:YES completion:nil];

这是使用原生对话框的另一种方式:

[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;
        }

     }

 }];

我们,开发者,认为这很酷,因为我们为用户提供了一个很好的功能,还因为我们的应用名称出现在帖子中,这可以对应用进行一些推广。

有趣的是,最新的实现不允许指定发布的应用名称,名称出现在“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 {


    }
}];

不幸的是,分享这个名字不再那么微不足道了,我想知道为什么以及谁在设计新的实现...... 我希望能得到一些帮助,在此先感谢。

我试着让我的问题变得有趣,因为花时间在如此琐碎的话题上太无聊了......

【问题讨论】:

  • 谢谢你的提示,我才发现它......

标签: objective-c ios facebook


【解决方案1】:

当您使用SLComposeViewController 时,实际上是系统向您展示了他们的控制器,并且是使用发布按钮发送的用户。因此在 Facebook 上它显示为“通过 iOS”。

没有办法改变它。

使用 Facebook SDK 3.1,在底层它也使用 iOS 6 原生集成,因此当您在 iOS 6 上调用 FBNativeDialogs 时,它使用的是 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

那么,回到您的问题,有 3 种方式可以发布到 Facebook 吗?实际上考虑到我提到的,iOS 6 中有两种方法:SLComposeViewControllerSLRequest。在较旧的 iOS 版本上,只有 1 个:Facebook SDK。

由于SLComposeViewController 归系统所有,而不是您的应用,因此它将始终以“通过 iOS”的形式共享。

另一方面,SLRequest 将显示您的应用名称。当您为SLRequest 指定帐户时,该帐户是通过ACAccountStore 获得的,因为传递了包括ACFacebookAppIdKey 在内的一些选项,这些选项将用于确定您的Facebook 应用程序名称以发布到用户供稿中帖子的一部分。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2014-02-12
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多