Je viens d'intégrer Facebook à mon application via iOS 6 mais j'ai un problème lors de la publication sur mon mur. Il dit simplement "publier via l'application ios". Je veux qu'il dise "publié via le nom de l'application". J'ai créé une identité d'application avec Facebook et j'ai le numéro d'application qu'ils ont attribué, mais je ne sais pas comment intégrer cela avec l'intégration Facebook.
Voici mon code. Si quelqu'un pouvait aider, ce serait apprécié. Merci!
{
NSString *message;
message= [[NSString alloc] initWithFormat:@"I've earned %@ points", [self retrieveScore]];
if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
[controller setInitialText:message];
[controller addURL:[NSURL URLWithString:@"http://mysite"]];
[self presentViewController:controller animated:YES completion:Nil];
[message release];
SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
NSString *output= nil;
switch (result) {
case SLComposeViewControllerResultCancelled:
output= @"Action Cancelled";
NSLog (@"cancelled");
break;
case SLComposeViewControllerResultDone:
output= @"Post Succesfull";
NSLog (@"success");
break;
default:
break;
}
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Facebook" message:output delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alert show];
[alert release];
[controller dismissViewControllerAnimated:YES completion:Nil];
};
controller.completionHandler =myBlock;
}
Ainsi, l'application Digg pour iOS est capable de partager sur Facebook sans utiliser le framework Accounts pour obtenir les autorisations des utilisateurs ... Ils utilisent UIActivityViewController
et font apparaître le message comme "via Digg", J'ai contacté quelqu'un de Digg et ils m'ont dit que c'était un processus manuel, vous devez avoir votre application iOS publiée dans l'App Store Apple et aussi avoir votre application Facebook acceptée et publiée dans l'App Store Facebook Facebook peut alors traiter manuellement la liaison des deux de cette manière.
L'inconvénient évident est que UIActivityViewController
signifie que vous pouvez partager à partir de votre application sans aucune intégration avec Facebook, pas besoin d'une application Facebook ... Mais pour obtenir "via le nom de votre application", vous aurez besoin d'un Facebook application que Facebook approuvera dans sa propre boutique d'applications, une fois que tout est en ligne, vous devrez contacter les relations avec les développeurs pour tout lier.
Notez que le reste de ma réponse (ma réponse précédente) est correct, la solution est un processus manuel que Facebook peut faire pour vous, votre code iOS ne devrait pas être affecté.
L'intégration Facebook native que vous souhaitez est en fait le contrôleur de vue composer. Ceci est obtenu en utilisant la classe SLComposeViewController
avec le type de service SLServiceTypeFacebook
.
Cette classe ne fournit qu'une communication à sens unique et comme vous le constatez, vous êtes celui qui confirme les messages sur le mur en appuyant sur le bouton Publier. Ce contrôleur de vue appartient au système iOS, pas à votre application. Et en interagissant avec ce contrôleur de composition, vous contournez réellement votre application.
Les utilisateurs aiment faire cela car cela leur donne de la sécurité.
À moins que votre application ne fonctionne que par une intégration Facebook bidirectionnelle plus profonde, vous devez utiliser le SLComposeViewController
(une intégration plus profonde signifie que votre application a besoin de votre liste d'amis ou de publications sur le mur, d'albums, etc.).
Pour qu'une publication provenant de votre application apparaisse sur Facebook avec "via xxxx" et non "via iOS", vous devez interagir avec Facebook via la classe SLRequest
. Pour ce faire, vous devez également interagir avec le Account.framework
en plus de Social.framework
.
Il ressemble au précédent SDK Facebook iOS précédemment utilisé (et peut toujours être utilisé) en termes de configuration, vous obtenez une référence au magasin de comptes de l'appareil, vous demandez des comptes Facebook et envoyez votre ID d'application Facebook et un tableau d'autorisations .
Si accordé, vous pouvez alors interagir avec l'API Facebook Graph via la classe SLRequest
. En affichant sur votre mur dans ce manoir, vous aurez le "via xxx" souhaité.
Pour l'utiliser, veuillez consulter la documentation pour SLRequest .
Veuillez noter que vous êtes responsable de créer votre propre vue de composition dans ce cas.
Vous pouvez bien sûr vous inspirer de l'interface utilisateur native, consultez également l'application iOS d'iPhoto, essayez de partager sur Facebook avec cette application, vous remarquerez qu'il demande la permission d'interagir avec votre compte Facebook (ce qui ne se produit pas lors de l'utilisation de SLComposeViewController
), il présente alors quelque chose de très proche du SLComposeViewController
pour la composition de messages Facebook.
Mais si vous regardez de plus près, vous remarquerez que ce n'est pas la même chose. Cela vaut également pour Twitter et leur application native vs intégration native. Ils ont leur propre vue de composition, il est vraiment intéressant de noter qu'ils utilisent l'intégration native iOS (les frameworks Apple). Nous le savons car en allant dans Paramètres> Confidentialité> Twitter, vous pouvez voir que l'application Twitter est une application autorisée utilisant le (s) compte (s) Twitter sur l'appareil.
Il en va de même pour Facebook.
Si vous n'obtenez pas d'autorisation, vous n'avez aucun moyen de publier en tant qu'application - alias "via myApp".
Désolé de vous décevoir, j'avais également cherché un moyen d'intégrer un ACAccount
dans le SLComposeViewController
mais je n'ai pas trouvé le chemin non plus. Ce qui est dommage ... car l'interface utilisateur native est douce.
J'ai fini par utiliser un framework Facebook personnalisé avec le nouveau SDK 3.1 de Facebook. Facebook Compose View
L'original est ici: facebook compose view . Je viens de corriger quelques avertissements mineurs et de mettre à jour avec le nouveau SDK FB 3.1.
Usage:
DEFacebookComposeViewControllerCompletionHandler __block completionHandler = ^(DEFacebookComposeViewControllerResult result) {
[self dismissViewControllerAnimated:YES completion:nil];
switch (result) {
case DEFacebookComposeViewControllerResultCancelled:
NSLog(@"Facebook Result: Cancelled");
break;
case DEFacebookComposeViewControllerResultDone:
NSLog(@"Facebook Result: Sent");
break;
}
};
DEFacebookComposeViewController * compose = [[DEFacebookComposeViewController alloc] init];
[compose setInitialText:self.shareText];
[compose addImage:self.shareImage];
[compose addURL:self.shareURL];
[compose setCompletionHandler:completionHandler];
[self presentViewController:compose animated:YES completion:^{}];
Installer:
$PROJECT_FOLDER\build\Debug-iphonesimulator
et faites glisser les deux FBComposeView.framework
FBComposeView.bundle
dans votre projet.Remarque: veillez à utiliser celles du Debug-iphonesimulator
. C'est le gros binaire.
Nous avons résolu un problème similaire avec l'intégration Twitter d'iOS 5, et le résultat est:
Lorsque vous publiez sur Twitter avec une version de développement ou via le simulateur, il apparaîtra presque toujours sur Twitter comme "via iOS". Une fois que votre application est approuvée et que vous publiez à partir de la version AppStore, elle devrait apparaître comme publiée par "YourAppName sur iOS" avec un lien vers la page de l'appstore des applications.
source d'origine (discussion sur le problème ShareKit)
Je suppose que Apple fait la même chose avec Facebook et d'autres services sociaux.
EDIT: malheureusement, cela n'a vraiment fonctionné qu'avec Twitter.framework. Je pense que la meilleure explication et réponse est celle de Daniel ci-dessus. C'est peut-être le moment de le radariser, afin que Apple sache, que voulons-nous.
Voici des exemples d'utilisation de SLRequest avec Facebook this SO question
EDIT2: a déposé un radar Bug ID # 12980058. Espérons qu'ils écoutent ...