web-dev-qa-db-fra.com

Impossible d'envoyer un tweet avec TwitterKit sur iOS 11

J'essaie d'utiliser le TwitterKit pour composer un Tweet, via la classe TWTRComposer fournie. C'est la fonction que j'appelle:

-(void) Tweet:(UIViewController *) root {
    TWTRComposer *composer = [[TWTRComposer alloc] init];

    [composer setText:@"just setting up my Twitter Kit"];

    // Called from a UIViewController
    [composer showFromViewController:root completion:^(TWTRComposerResult result) {
        if (result == TWTRComposerResultCancelled) {
            NSLog(@"Tweet composition cancelled");
        }
        else {
            NSLog(@"Sending Tweet!");
        }
    }];
}

Il y a deux problèmes avec ceci:

  1. Lorsque l'application Twitter est installée sur mon appareil, la boîte de dialogue TWTRComposer s'affiche. Peu de temps après, une autre alerte apparaît, qui porte le titre: " Aucun compte Twitter " et le message suivant: " Aucun compte Twitter n'est configuré. Vous pouvez ajouter ou créer un compte Twitter dans les paramètres. " Je peux fermer cette boîte de dialogue, puis envoyer le Tweet (avec succès), mais il s'agit évidemment d'un très mauvais UX. En outre, cette boîte de dialogue d'erreur est étrange, car iOS 11 n'a plus Twitter dans les paramètres.
  2. Lorsque l'application Twitter est not installée sur mon appareil, la boîte de dialogue TWTRComposer n'est pas affichée du tout. Au lieu de cela, le bloc d'achèvement de la méthode showFromViewController est appelé immédiatement, avec un résultat de type TWTRComposerResultCancelled.

J'ai l'impression que cela pourrait être lié d'une certaine manière aux problèmes de connexion avec Twitter. L'application que je travaille n'inclut pas Inscription/Connexion avec Twitter. Cependant, j'avais l'impression que TWTRComposer gérait toutes les connexions.

Toute aide est vraiment appréciée et merci de votre lecture!

8
Miki P

Vous avez raison: en raison des modifications apportées à iOS 11, vous devez vous connecter avant d'appeler TWTRComposer.

iOS 11 ne prend plus en charge l'utilisation de Twitter via le cadre social intégré. Au lieu de cela, vous pouvez utiliser Twitter Kit 3 pour tweeter, connecter des utilisateurs et utiliser l'API Twitter. Le guide suivant montre comment migrer votre ancien code.

Connectez-vous (avec l'ordre suivant, si possible, Twitter pour iOS/SFSafariViewController/UIWebView. Vérifiez conditions préalables ), puis composez:

ObjC:

// Check if current session has users logged in
if ([[Twitter sharedInstance].sessionStore hasLoggedInUsers]) {
    TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
    [fromController presentViewController:composer animated:YES completion:nil];
} else {
    [[Twitter sharedInstance] logInWithCompletion:^(TWTRSession *session, NSError *error) {
        if (session) {
            TWTRComposerViewController *composer = [TWTRComposerViewController emptyComposer];
            [fromController presentViewController:composer animated:YES completion:nil];
        } else {
            UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"No Twitter Accounts Available" message:@"You must log in before presenting a composer." preferredStyle:UIAlertControllerStyleAlert];
            [self presentViewController:alert animated:YES completion:nil];
        }
    }];
}

Rapide:

if Twitter.sharedInstance().sessionStore.hasLoggedInUsers() {
    // App must have at least one logged-in user to compose a Tweet
    let composer = TWTRComposerViewController.emptyComposer()
    present(composer, animated: true, completion: nil)
} else {
    // Log in, and then check again
    Twitter.sharedInstance().logIn { session, error in
        if session != nil { // Log in succeeded
            let composer = TWTRComposerViewController.emptyComposer()
            self.present(composer, animated: true, completion: nil)
        } else {
            let alert = UIAlertController(title: "No Twitter Accounts Available", message: "You must log in before presenting a composer.", preferredStyle: .alert)
            self.present(alert, animated: false, completion: nil)
        }
    }
}

Docs:

7
nathan

À partir du 12 juin 2018, le verrouillage des rappels ne sera plus facultatif. Le format de rappel correct pour les applications iOS est:

twitterkit-MY_CONSUMER_KEY://

https://developer.Twitter.com/en/docs/basics/callback_url.html

0
shahil