Есть ли другой способ запустить приложение Сообщения в 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 ответа

Решение

И да и нет.

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

Ты можешь только:

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

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

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

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

  1. Импортировать MessageUI Рамки для вашего проекта

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

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

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

NSString *url = [sms stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
Другие вопросы по тегам