Использование MFMailComposeViewController и процесс одобрения Apple - PullRequest
1 голос
/ 22 октября 2010

В моем приложении есть механизм журналов, который дает возможность клиенту отправлять журналы по почте. Для этого я встроил в свое приложение Apple MFMailComposeViewController. В случае, если клиент использует устройство с низкой версией ОС (2.x) или учетная запись электронной почты не представлена ​​на устройстве, я выдвинул некоторые UIAlertsView с некоторыми наводящими сообщениями для пользователей. Может кто-нибудь взглянуть на мой код ниже и ответить, если есть что-то, что может привести к отказу Apple?

BOOL canSendmail = [MFMailComposeViewController canSendMail];

if (!canSendmail) {


    NSMutableString* osVersion = [NSMutableString stringWithString:[[UIDevice currentDevice] systemVersion]];
    EventsLog* logs = [EventsLog getInstance];

    if ([osVersion characterAtIndex : 0] == '2'  || [osVersion characterAtIndex : 0] == '1' ) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Email", @"") 
                                                        message:NSLocalizedString(@"Failed to send E-mail.For this service you need to upgrade the iPhone OS to 3.0 version or later", @"")
                                                       delegate:self cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles: nil];
        [alert show];
        [alert release];



        [logs writeEvent : @"Cannot send e-mail - iPhone OS needs upgrade to at least 3.0 version" classSource:@"LogsSessionDetailViewController@sendEmail" details : (@" device OS version is %@",osVersion)];

        return;

    }
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Email", @"") 
                                                    message:NSLocalizedString(@"Failed to send E-mail.Please set an E-mail account and try again", @"")
                                                   delegate:self cancelButtonTitle:NSLocalizedString(@"OK", @"") otherButtonTitles: nil];
    [alert show];
    [alert release];

    [logs writeEvent : @"Cannot send e-mail "  
          classSource:@"LogsSessionDetailViewController@sendEmail" details : @"-  no e-mail account activated"];

    return;
}



UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Email", @"") 
                message:NSLocalizedString(@"The data you are sending will be used to improve the application. You are free to add any personal comments in this e-mail", @"")
                delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", @"") otherButtonTitles: nil];

[alert addButtonWithTitle:NSLocalizedString(@"Submit", @"")];
[alert show];
[alert release];

Большое спасибо,

Alex.

1 Ответ

2 голосов
/ 22 октября 2010

Я не буду говорить о допуске / отклонении магазина приложений, но ваш код должен аварийно завершить работу на iPhone OS 2.x - вы вызываете

BOOL canSendmail = [MFMailComposeViewController canSendMail];

, не проверяя, возможен ли этот вызов (класс MFMailComposeViewController недоступен в2.x система).Также ручная проверка версии ОС не является хорошей практикой.Вместо этого вы должны сначала проверить, присутствует ли MFMailComposeViewController в текущей среде выполнения:

if ( !NSClassFromString(@"MFMailComposeViewController") ){
    // Put code that handles OS 2.x version
    return;
}

if (![MFMailComposeViewController canSendMail]){
    // Put code that handles the case when mail account is not set up
    return;
}

//Finally, create and send your log
...

PS Не забывайте, что вы должны установить тип связи для каркаса MessageUI как «слабый» в целевых настройках - ваше приложение аварийно завершитсястарые системы при запуске, если вы используете тип связи, будет «обязательным» (значение по умолчанию).

...