Ho un pezzo di pezzo di codici di condivisione di Twitter che funziona bene per iOS6 ma ho bisogno l'applicazione di ripiegare bene per iOS5 troppo ...iOS6 - Social Framework: in che modo SLComposeViewController esegue il fallback su TWTweetComposeViewController per iOS5?
Ecco come si presenta:
- (void) shareOnTwitter
{
if([SLComposeViewController instanceMethodForSelector:@selector(isAvailableForServiceType)] != nil)
{
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
NSLog(@"twitter available");
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[composeViewController setInitialText:self.sharingText];
[self.sharingController presentViewController:composeViewController animated:YES completion:nil];
}
else
{
NSLog(@"twitter not available!");
}
}
else
{
// SLComposeViewController not available, this is most likely <iOS6, what to do here?
}
}
SO, come faccio a ricadere bene su iOS5 (presumo di aver bisogno di TWTweetComposeViewController) in modo da poter utilizzare anche il nativo Twitter in iOS5?
EDIT: Alla fine io sono ancora pigro per ripiego per TWTweetComposeViewController così ho deciso di ripiego semplicemente in questa sequenza: iOS6 Tweet nativo -> installato Twitter APP -> web url. Questa è la funzione che ho messo insieme, spero che aiuta qualcuno:
+(BOOL)isSocialFrameworkAvailable
{
// whether the iOS6 Social framework is available?
return NSClassFromString(@"SLComposeViewController") != nil;
}
- (void) shareOnTwitterWithText:(NSString*)text andURL:(NSString*)url andImageName:(NSString*)imageName
{
// prepare the message to be shared
NSString *combineMessage = [NSString stringWithFormat:@"%@ %@", text, url];
NSString *escapedMessage = [combineMessage stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *appURL = [NSString stringWithFormat:@"twitter://post?message=%@", escapedMessage];
if([SocialManager isSocialFrameworkAvailable] && [SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
// user has setup the iOS6 twitter account
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
[composeViewController setInitialText:text];
if([UIImage imageNamed:imageName])
{
[composeViewController addImage:[UIImage imageNamed:imageName]];
}
if(url)
{
[composeViewController addURL:[NSURL URLWithString:url]];
}
[self.sharingController presentViewController:composeViewController animated:YES completion:nil];
}
else
{
// else, we have to fallback to app or browser
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:appURL]])
{
// twitter app available!
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURL]];
}
else
{
// worse come to worse, open twitter page in browser
NSString *web = [NSString stringWithFormat:@"https://twitter.com/intent/tweet?text=%@", escapedMessage];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:web]];
}
}
}
grazie chris! la tua risposta mi ha confermato che ho bisogno di includere il framework di Twitter che non è disponibile nella mia ultima versione di Xcode ora .. ho bisogno di farlo ... grazie! – mkto
@chris puoi utilizzare TWTweetComposeViewController in iOS6 o quali sono i vantaggi dell'utilizzo di SLComposeViewController in iOS6? –
Non so se c'è un vantaggio, e sono disposto a scommettere 'SLComposeViewController' semplicemente racchiudendo' TWTweetComposeViewController'. Inoltre, potrei immaginare che Apple alla fine deprecherà 'TWTweetComposeViewController' in favore di' SLComposeViewController'. – chris