Бывает, надо сделать кнопку «Поделиться» для определенного мессенджера. Самый быстрый способ — это url-схемы. Можно просто вызвать [[UIApplication sharedApplication] openURL:url]; для правильно сконфигурированной ссылки и установленный на телефоне мессенджер примет переданный текст для дальнейшей обработки.
Сейчас покажу, как это сделать для WhatsApp, Viber и Telegram.Для начала определим формат сообщения. Пусть это будет текст и ссылка:
NSString *text = [NSString stringWithFormat:@"%@ %@", shareText, shareURL.absoluteString];
Найти формат url для каждого приложения не составляет труда. Обычно справку публикуют на официальном сайте, например, так выглядит справка WhatsApp.
NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"];
Как видно, для подстроки с содержимым необходимо экранировать символы.
В Foundation есть набор методов для обработки строк. Возьмем метод -stringByAddingPercentEncodingWithAllowedCharacters: и набор символов [NSCharacterSet URLQueryAllowedCharacterSet] . Но есть один нюанс, раз у нас в подстроке содержится shareUrl, то нужно из набора изъять некоторые символы: [set removeCharactersInString:@»:/?&=»]
Теперь просто соберем всё части вместе:
// 1 компонуем строку для полной ссылки NSString *text = [NSString stringWithFormat:@"%@ %@", shareText, shareURL.absoluteString]; // 2 заменяем символы NSMutableCharacterSet *set = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy]; [set removeCharactersInString:@":/?="]; text = [text stringByAddingPercentEncodingWithAllowedCharacters:set]; // 3 создаем объект NSURL NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"whatsapp://send?text=%@", text]];
И итоговый метод может выглядеть так:
+(void)openShare:(ShareType)accountType
URL:(NSURL*)shareURL
text:(NSString*)shareText
{
DLog(@"");
NSString *text = [NSString stringWithFormat:@"%@ %@", shareText, shareURL.absoluteString];
NSMutableCharacterSet *set = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
[set removeCharactersInString:@":/?="];
text = [text stringByAddingPercentEncodingWithAllowedCharacters:set];
NSURL *url = nil;
switch (accountType) {
case ShareTypeWhatsApp: {
url = [NSURL URLWithString:[NSString stringWithFormat:@"whatsapp://send?text=%@", text]];
break;
}
case ShareTypeViber: {
url = [NSURL URLWithString:[NSString stringWithFormat:@"viber://forward?text=%@", text]];
break;
}
case ShareTypeTelegram: {
url = [NSURL URLWithString:[NSString stringWithFormat:@"tg://msg?text=%@", text]];
break;
}
default:
break;
}
if (url && [[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
} else {
[MyAppDelegate
showError:[NSError
errorWithDomain:[NSString stringWithFormat:@"%@.api",[NSBundle mainBundle].bundleIdentifier]
code:404
userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"sharing.messangers.no-app-on-device", nil)}]];
}
}

Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.