12

我们正在尝试提交一个 iOS 应用程序,该应用程序可以进行慈善 SMS 捐赠。我们过去做过很多这样的事情,没有问题;但苹果不再愿意接受我们的做法并拒绝了我们的应用程序。

他们声称该应用程序不符合指南的第 21.2 点。这是:

21.2募捐必须通过 Safari 中的网站或短信进行

过去,在这个当前的应用程序中,我们使用MFMessageComposeViewController框架MessageUI来构建 SMS 消息。我们使用它是因为;作为对简码的捐赠,我们需要能够在消息中编写关键字。

在调解中心(和拒绝争议)进行了一些反复讨论之后,我能从苹果公司得到的关于我们应该做的最多的事情是:

从应用程序内发送 SMS 消息可能不符合 App Store 指南。

SMS 链接应启动 Messages 以进行捐赠。

我们可以使用sms: URL 方案来启动特定数量的消息应用程序,但该方法不允许我们添加所需的关键字。


所以问题是:有谁知道启动消息应用程序的另一种方式?

我们的后备选项是放弃自己构建 SMS 消息,并有一个警报告诉用户“将YYYY 发送到 ZZZZ ”,这是一个非常糟糕的用户体验。


更新(2013 年 3 月 5 日):

我们再次使用仅警报后备选项重新提交了该应用程序……出于同样的原因,它再次被拒绝。我们再次与苹果公司竞争。


更新(2013 年 3 月 6 日):

在向 Apple 发出严厉的信息后,解释了显而易见的……该应用程序已通过提交。

我写:

我们必须不同意。该应用程序不包括在应用程序内收集慈善捐款的功能。它只通知用户他们可以如何捐赠。

所以; 如果您有同样的问题,我建议您先尝试投诉,然后再“修复”您的应用程序。

4

2 回答 2

20

是和否。

在基本层面上:否。我查看了文档,当您在外部调用 Messages 应用程序时,您(相当令人沮丧)无法为您的消息设置正文。

您只能:

  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)或您的应用程序需要的任何内容。

我确信第二种方法应该被批准,或者苹果应该从他们的文档中删除它。关键是canSendTextif 语句。如果这个(或 case 开关didFinishWithResult)没有实现,Apple 肯定会拒绝该应用程序。

于 2013-02-14T10:01:18.283 回答
6

您也可以设置正文,但您必须转义字符串。

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

NSString *url = [sms stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
于 2016-03-10T15:26:32.537 回答