0

Ich arbeite an einem Spiel, das auf iOS, Android und Web läuft. Auf dem Web-Client ich einen Feed-Dialog einrichten kann, die ein Benutzer senden Lassen Sie sich auf einem Zeitleiste Freund:Facebook iOS/Android SDK teilen Link auf Freundes Feed

Share on friend-s feed

, die mit diesem Code erreicht ist:

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){ 
    ... 
}); 

Das to Feld in den params In diesem Fall wählt der Dialog standardmäßig den Feed des Freundes aus.

Ich möchte dasselbe auf den iOS- und Android-Clients tun, aber ich finde keine Möglichkeit, dies mit SDK 4.x zu erreichen.

Die docs sagen:

„Mit der Share-Taste Sie Menschen Inhalte an ihre Facebook-Timeline, einem Freund der Zeitleiste oder in einer Gruppe teilen können.“

Obwohl es wahr ist, dass der Dialog der Spieler erlaubt, auf Timeline ihren Freund zu teilen, es scheint nicht ein Weg zu sein, um diese Option zu wählen, bevor Sie den Dialog für den Benutzer.

Mit Blick auf FBSDKShareDialog 's und FBSDKShareLinkContent' s Schnittstellen sehe ich keine Möglichkeit, das "zu" wie in JS zu spezifizieren. Fehlt diese Funktionalität nur in den mobilen SDKs?

+0

Sie haben Recht. Du kannst einen Freund nicht vorwählen – WizKid

Antwort

0

Also nach ein wenig in den Code des Facebook SDK zu graben, fand ich einen Weg, um zu tun, was ich wollte, aber es verwendet undokumentierten und veralteten Code ... (nach den Code-Kommentare ist dies zur Unterstützung von Unity). Es ist also nicht genau zu empfehlen, aber für den Fall, dass es jemandem hilft, hier:

Auf iOS gibt es eine versteckte Eigenschaft in FBSDKShareLinkContent, die Sie ein Freiform-Parameter-Wörterbuch für den Freigabe-Dialog im "Feed" -Modus übergeben können . Normalerweise ist dies nicht möglich, aber es genügt, eine Erweiterung zu deklarieren, um sie öffentlich zu machen. Mit dem Schlüssel "to" zum Angeben der Freund-ID funktioniert der Dialog wie im 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 

Auf Android gibt es eine nicht dokumentierte Klasse namens ShareFeedContent, die anstelle der normalen ShareLinkContent verwendet werden kann, und enthält ein toId Feld, das ist das, was ich brauchte.

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 

Es ist wahrscheinlich keine gute Idee, diese zu verwenden, aber sie funktionieren definitiv. Hoffentlich hat jemand anderes eine sauberere Alternative.