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:
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!
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:
À 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