Бывает, надо сделать кнопку «Поделиться» для определенного мессенджера. Самый быстрый способ — это 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)}]]; } }
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.