朋友的订阅源

时间:2017-02-22 14:21:17

标签: android ios facebook facebook-android-sdk facebook-ios-sdk-4.0

我正在开发一款运行在iOS,Android和Web上的游戏。在Web客户端上,我可以设置一个供稿对话框,让用户在朋友的时间轴上发帖:

Share on friend-s feed

使用此代码实现了这一目标:

var params =
{
    name: name,
    link: link,
    picture: picture,
    caption: caption,
    description: description,
    actions: actions,
    properties: properties
};

params.method = 'feed';
params.to = friend_id;

FB.ui(params, function(response){
    ...
});

to中的params字段是默认情况下对话框选择朋友的Feed的原因。

我想在iOS和Android客户端上做同样的事情,但我找不到使用SDK 4.x实现此目的的方法。

文档说:

  

“使用分享按钮,您可以让人们分享内容   Facebook时间表,朋友的时间表或小组。“

虽然对话框允许玩家在朋友的时间轴上分享,但在将对话框呈现给用户之前似乎没有办法选择此选项。

查看FBSDKShareDialogFBSDKShareLinkContent的接口,我没有像JS中那样指定“to”的方法。移动SDK中是否缺少此功能?

1 个答案:

答案 0 :(得分:0)

因此,经过对Facebook SDK代码的一些挖掘后,我找到了一种方法来做我想要的,但是它使用了未记录和弃用的代码...(根据代码注释,这是在那里支持Unity)。所以它并不是完全推荐的,但为了防止有人帮忙,这里就是:

在iOS上,FBSDKShareLinkContent中有一个隐藏属性,可让您为" feed"中的共享对话框传递自由格式参数字典。模式。通常这是不可访问的,但宣布扩展是公开所需的全部内容。使用"to"键指定朋友ID使对话框在Web上工作。

@interface FBSDKShareLinkContent ()
@property (nonatomic, copy) NSDictionary* feedParameters;
@end

...

FBSDKShareLinkContent* content = [[FBSDKShareLinkContent alloc] init];
content.contentTitle = title;
content.contentDescription = description;
content.contentURL = linkURL;
content.imageURL = imageURL;
content.feedParameters = @{@"to" : friendId}; // Setting hidden property

FBSDKShareDialog* shareDialog = [[FBSDKShareDialog alloc] init];
shareDialog.mode = FBSDKShareDialogModeFeedWeb; // Use feed mode

在Android上,有一个名为ShareFeedContent的未记录的类可以用来代替普通的ShareLinkContent,并且包含一个toId字段,这是我需要的。

import com.facebook.share.internal.ShareFeedContent; // Import undocumented class

ShareFeedContent content = new ShareFeedContent.Builder()
    .setLinkName(title)
    .setLinkDescription(description)
    .setLink(linkURL)
    .setPicture(imageURL)
    .setToId(friendId)
    .build(); 

ShareDialog shareDialog = new ShareDialog(activity);
shareDialog.show(content, ShareDialog.Mode.FEED); // Use feed mode

使用这些可能不是一个好主意,但它们确实有效。希望其他人有更清洁的选择。