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