0

Я работаю над игрой, которая работает на iOS, Android и в Интернете. На веб-клиенте можно настроить диалог подачи, которые позволяют это сообщение пользователю на временной шкале друга:Facebook iOS/Android SDK поделиться ссылкой на канал друга

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

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

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

«С Share Button вы позволяют людям обмениваться контентом с их Facebook график, на временную шкалу друга или в группе.»

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

Глядя на интерфейсы FBSDKShareDialog и FBSDKShareLinkContent, я не вижу способа указать «to», как в JS. Является ли эта функция просто отсутствующей в мобильных SDK?

+0

Вы верны. Вы не можете предварительно выбрать друга – WizKid

ответ

0

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

В iOS есть скрытое свойство в FBSDKShareLinkContent, которое позволяет передавать словарь параметров свободной формы для диалога общего доступа в режиме «feed» , Обычно это недоступно, но объявление расширения - это все, что необходимо, чтобы сделать его общедоступным. Использование ключа "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 

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