Есть ли другой способ запуска приложения Messages в iOS? (для пожертвований)

Мы пытаемся отправить приложение iOS, которое делает благотворительные пожертвования на СМС. Мы проделали ряд из них в прошлом без проблем; но Apple больше не желает принимать наш подход и отклонила наше приложение.

Их утверждение состоит в том, что приложение не соответствует пункту 21.2 руководящих принципов. Что есть:

21.2 Сбор пожертвований должен осуществляться через веб-сайт в Safari или SMS

В прошлом и в этом текущем приложении мы используем MFMessageComposeViewController в структуре MessageUI для создания SMS-сообщения. Мы используем это потому, что; будучи пожертвованием на короткий код, мы должны иметь возможность написать ключевое слово в сообщении.

После немного назад и вперед в Центре разрешений (и в случае отклонения отклонений), я могу выйти из Apple, что мы должны делать:

Отправка SMS-сообщений из приложения может не соответствовать рекомендациям в App Store.

и

В SMS-сообщении должны появиться сообщения, чтобы сделать пожертвование.

Мы можем использовать схему URL sms: для запуска приложения Messages для определенного номера, но этот метод не позволяет нам добавьте требуемое ключевое слово.


Итак, вопрос: кто-нибудь знает о другом способе запуска приложения "Сообщения"?

Наш резервный вариант заключается в том, чтобы отказаться от создания SMS-сообщения самостоятельно и иметь предупреждение, которое сообщает пользователю "Text YYYY to ZZZZ", который довольно плохой пользовательский интерфейс.


Обновление (5 марта 2013 г.):

Мы снова отправили приложение снова с нашим резервным вариантом только для предупреждения... он был отклонен снова по тем же причинам. Мы снова обсуждаем это с Apple.


Обновление (6 марта 2013 года):

После кормового сообщения Apple, объясняющего очевидное... приложение прошло подачу.

Я написал:

Мы должны не согласиться. Приложение не включает в себя возможность собирать благотворительные пожертвования в приложении. Он информирует пользователя только о том, как они могут пожертвовать.

Итак, если у вас есть такая же проблема, я предлагаю сначала попробовать жаловаться, прежде чем "исправлять" ваше приложение.

Ответ 1

Да и Нет.

На базовом уровне: НЕТ.. Я просмотрел документы, и вы (довольно разочаровывающе) не можете установить тело для своего сообщения при внешнем вызове приложения Messages.

Вы можете:

  • Откройте приложение сообщений

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
    
  • Введите номер сообщения в

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:+1234567890"]];
    

Более сложный: ДА. Вот метод и код для отправки SMS с телом. Он представляет точно такое же, как приложение сообщений, как ModalView. И для справки вы можете прочитать здесь.

  1. Импортируйте MessageUI Framework в свой проект

  2. Добавьте их в .h представления, что действие для отправки сообщения включено (в моем случае простой просмотр с помощью одной кнопки).

    #import <MessageUI/MessageUI.h>
    #import <MessageUI/MFMessageComposeViewController.h>
    
  3. Важный код для отправки сообщения должен быть похож на:

    -(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 if. Если этот (или переключатель случая для didFinishWithResult) не реализован, Apple, безусловно, отвергнет приложение.

Ответ 2

Вы также можете установить тело, но вы должны избежать строки.

NSString *sms = @"sms://+1234567890&body=This is the body.";

NSString *url = [sms stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];