Facebook iOS/Android SDK поделиться ссылкой на ленту друзей

Я работаю над игрой, которая работает на iOS, Android и в Интернете. В веб-клиенте я могу настроить диалог фида, который позволяет пользователю публиковать сообщения на временной шкале друга:

Поделиться на ленте друзей

Это достигается с помощью этого кода:

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 это то, что заставляет диалог выбирать канал друга по умолчанию.

Я хочу сделать то же самое на клиентах iOS и Android, но не могу найти способ добиться этого с помощью SDK 4.x.

Документы говорят:

"С помощью кнопки" Поделиться "вы ​​позволите людям обмениваться контентом на своей временной шкале Facebook, на временной шкале друга или в группе".

Хотя это правда, что диалог позволяет игроку делиться на временной шкале своего друга, похоже, нет способа выбрать эту опцию перед тем, как представить диалог пользователю.

Смотря на FBSDKShareDialogи FBSDKShareLinkContentВ интерфейсах я не вижу способа указать "to", как в JS. Эта функциональность просто отсутствует в мобильных SDK?

1 ответ

Поэтому после некоторого поиска кода в Facebook SDK я нашел способ сделать то, что хотел, но он использует недокументированный и устаревший код... (в соответствии с комментариями к коду это делается для поддержки Unity). Так что это не совсем рекомендуется, но на случай, если это кому-то поможет, вот оно:

На iOS есть скрытое свойство в FBSDKShareLinkContent это позволяет передавать словарь параметров в свободной форме для диалогового окна общего доступа в режиме "подачи". Обычно это недоступно, но объявление расширения - это все, что нужно, чтобы сделать его общедоступным. С использованием "to" Клавиша для указания идентификатора друга заставляет диалог работать как в Интернете.

@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

Вероятно, это не очень хорошая идея, но они определенно работают. Надеюсь, у кого-то есть более чистая альтернатива.

Другие вопросы по тегам