8
votes

Facebook iOS SDK 3.5.1: OpenCactiveSessionWithReadPerrissements - Traiteur d'achèvement appelé deux fois

J'ai un bouton pour partager un lien. J'utilise fondamentalement deux appels: OpenactiveSessionWithReadPersmissions Code> et DemandeNewPublishpermissions Code>.

C'est donc le bouton Action: P>

-(void) _share;
{

    NSMutableDictionary *params_dict = [NSMutableDictionary dictionary];
    // setting some params

    [FBRequestConnection startWithGraphPath:@"me/feed" parameters:params_dict HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
    {
        if (result)
        {
            // sharing succedeed, do something
        }
        else if (error)
        {
            //sharing failed, do something else
        }
    }];
}


1 commentaires

Veuillez consulter la réponse dans ce message: [Entrez la description du lien] [1] [1]: Stackoverflow.com/questions/12915420/...


3 Réponses :


2
votes

Vous pouvez utiliser cette

   -(void)publishFacebook
   {
NSMutableDictionary *postParams2= [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                                   haberLink, @"link",
                                   @"abc.com", @"name",
                                   title, @"caption",
                                   desc, @"description",
                                   nil];

[FBRequestConnection
 startWithGraphPath:@"me/feed"
 parameters:postParams2
 HTTPMethod:@"POST"
 completionHandler:^(FBRequestConnection *connection,
                     id result,
                     NSError *error) {
     NSString *alertText;
     if (error) {
         alertText = [NSString stringWithFormat:
                      @"error: domain = %@, code = %d",
                      error.domain, error.code];
     } else {
         alertText = [NSString stringWithFormat: @"Shared Facebook"];



         [[[UIAlertView alloc] initWithTitle:@"Shared Facebook"
                                     message:alertText
                                    delegate:self
                           cancelButtonTitle:@"Ok"
                           otherButtonTitles:nil]
          show];

     }
 }];


3 commentaires

Merci pour votre aide, mais je voudrais vraiment comprendre si je fais quelque chose de mal et que la bonne façon de gérer ce comportement facebook


Dans votre méthode de partage préparatoire, vous l'avez déjà publiée lorsque vous appelez la méthode _share poster à nouveau


Oui, mais l'un est dans le bloc-même (si je n'ai pas la permission de publication, demandez-la, puis partagez-la), l'autre est dans le bloc d'en plus (si j'ai déjà publié la permission, il suffit de partager). Le problème est que _share est appelé dans l'énoncé d'essentiel de _PreveHare déclenché par FLBSessionStateOpenTokelOstOstended, tandis que RequestNewPublishpermissions n'a pas encore appelé son gestionnaire d'achèvement, lorsque _share est appelé à nouveau



13
votes

Il semble que par conception, Facebook SDK conserve des références à bloquer les gestionnaires, même après avoir été appelés. Ainsi, dans votre appel à OpenactiveSessionWithReadPersmissions Le gestionnaire d'achèvement peut être appelé de nombreuses fois, au cas où l'état de la session change. Voir Facebooks commenter sur ce numéro ici .

En tant que travail autour, vous voudrez peut-être mettre en œuvre Votre propre mécanisme qui assure que le gestionnaire est tiré une seule fois: xxx


0 commentaires

1
votes

Veuillez lire Mise à niveau de 3,0 à 3.1 , en particulier le paragraphe demandant des autorisations de lecture et d'écriture séparément . Il semble que Facebook SDK ne soit pas censé être utilisé de cette façon.

Vous êtes maintenant obligé de demander lire et publier la permission séparément (et dans cet ordre). Très probablement, vous demanderez les autorisations de lecture de la personnalisation lorsque l'application démarre et que l'utilisateur se connecte d'abord. Plus tard, le cas échéant, votre application peut demander des autorisations de publication lorsqu'il a l'intention de publier des données sur Facebook.

et

Il est important que vous n'essayez pas simplement d'appeler les deux méthodes individuelles de retour pour remplacer l'une des fonctions obsolètes.

Je me demande comment vous avez réussi à résoudre ce problème. BTW, je reçois le même rapport d'accident (FBSESSession: il n'est pas valide pour réautoriser lorsqu'un appel de rétention précédent n'est pas encore terminé).


0 commentaires