Есть ли другой способ запустить приложение Сообщения в iOS? (для пожертвований)
Мы пытаемся представить приложение для iOS, которое делает благотворительные SMS-пожертвования. Мы делали некоторые из них в прошлом без проблем; но Apple больше не желает принимать наш подход и отклонила наше приложение.
Они утверждают, что приложение не соответствует пункту 21.2 руководящих принципов. Который:
21.2 Сбор пожертвований должен быть сделан через веб-сайт в Safari или SMS
В прошлом и в этом текущем приложении мы использовали MFMessageComposeViewController
в MessageUI
рамки для построения смс сообщения. Мы используем это, потому что; поскольку мы вносим пожертвование в шорткод, мы должны иметь возможность написать ключевое слово в сообщении.
После небольшого перерыва в Центре разрешения проблем (и спора об отказе) я больше всего могу узнать от Apple о том, что мы должны делать:
Отправка SMS-сообщений из приложения может не соответствовать рекомендациям App Store.
а также
Ссылка SMS должна запускать сообщения, чтобы сделать пожертвование.
Мы можем использовать sms:
Схема URL для запуска приложения Сообщения для определенного номера, но этот метод не позволяет нам добавить необходимое ключевое слово.
Итак, вопрос: кто-нибудь знает другой способ запуска приложения Сообщения?
Наш альтернативный вариант - отказаться от создания SMS-сообщения самостоятельно и получить предупреждение, сообщающее пользователю "Текст YYYY to ZZZZ", что является довольно плохим опытом для пользователя.
Обновление (5 марта 2013 г.):
Мы повторно отправили приложение с нашей опцией только для предупреждения... оно было снова отклонено по тем же причинам. Мы снова оспариваем это с Apple.
Обновление (6 марта 2013 г.):
После строгого сообщения Apple, объясняющего очевидное... приложение прошло подачу.
Я написал:
Мы должны не согласиться. Приложение не включает в себя возможность сбора благотворительных пожертвований в приложении. Он только информирует пользователя о том, как они могут пожертвовать.
Так; если у вас возникла та же проблема, я советую сначала попытаться пожаловаться, прежде чем приступить к "исправлению" вашего приложения.
2 ответа
И да и нет.
На базовом уровне: НЕТ. Я просмотрел документы, и вы (довольно разочаровывающе) не можете установить тело для своего сообщения при внешнем вызове приложения Сообщения.
Ты можешь только:
Откройте приложение сообщений
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
Введите номер для сообщения
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:+1234567890"]];
Более сложный: ДА. Вот способ и код для отправки смс с телом. Он представляет вид в точности как приложение сообщений в виде ModalView. И для справки вы можете прочитать документы здесь.
Импортировать
MessageUI
Рамки для вашего проектаДобавьте их в.h представления о том, что действие по отправке сообщения включено (в моем случае это простое представление с одной кнопкой).
#import <MessageUI/MessageUI.h> #import <MessageUI/MFMessageComposeViewController.h>
Важный код для отправки сообщения должен быть похож на:
-(IBAction)sendSMS:(id)sender { if([MFMessageComposeViewController canSendText]) { MFMessageComposeViewController *controller = [[MFMessageComposeViewController alloc] init]; controller.body = @"Hello"; controller.recipients = [NSArray arrayWithObjects:@"+1234567890", nil]; controller.messageComposeDelegate = self; [self presentViewController:controller animated:YES completion:nil]; } }
Приведенный выше код не будет отправлять тексты или отменять просмотр, так как мы не реализовали messageComposeViewController:didFinishWithResult:
Метод - документы для этого можно прочитать здесь. Это будет выглядеть следующим образом:
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
didFinishWithResult:(MessageComposeResult)result {
switch(result) {
case MessageComposeResultCancelled:
// user canceled sms
[self dismissViewControllerAnimated:YES completion:nil];
break;
case MessageComposeResultSent:
// user sent sms
//perhaps put an alert here and dismiss the view on one of the alerts buttons
break;
case MessageComposeResultFailed:
// sms send failed
//perhaps put an alert here and dismiss the view when the alert is canceled
break;
default:
break;
}
}
В каждом случае вы можете представить оповещения, отклонить представление (как в случае 1) или все, что требует ваше приложение.
Я уверен, что этот второй метод должен быть одобрен или Apple должна удалить его из своей документации. Ключевая вещь, хотя это canSendText
если заявление. Если это (или случай переключения для didFinishWithResult
) не реализована Apple, безусловно, отклонит приложение.
Вы также можете установить тело, но вы должны избежать строки.
NSString *sms = @"sms:+1234567890&body=This is the body.";
NSString *url = [sms stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];