【问题标题】:Is there another way of launching the Messages app in iOS? (for donations)是否有另一种在 iOS 中启动 Messages 应用程序的方法? (用于捐赠)
【发布时间】:2013-01-30 02:02:28
【问题描述】:

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

他们声称该应用不符合指南的第 21.2 点。即:

21.2 必须通过 Safari 中的网站或短信来收集捐款

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

在调解中心(和拒绝纠纷)进行了一番反复讨论之后,我从 Apple 那里得到的最多信息是:

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

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

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


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

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


更新(2013 年 3 月 5 日):

我们再次使用仅警报后备选项重新提交了该应用程序......由于相同的原因再次被拒绝。我们再次与 Apple 竞争。


更新(2013 年 3 月 6 日):

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

我写道:

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

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

【问题讨论】:

    标签: ios sms messages submission donations


    【解决方案1】:

    你也可以设置正文,但你必须对字符串进行转义。

    NSString *sms = @"sms://+1234567890&body=This is the body.";
    
    NSString *url = [sms stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
    

    【讨论】:

    • 我不确定sms: 方案是否总是这样,但现在似乎是这样。
    【解决方案2】:

    是和否。

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

    你只能:

    1. 打开消息应用

      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
      
    2. 输入一个数字来发送消息

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

    更复杂:是的。 这是发送带有正文的 SMS 的方法和代码。它以 ModalView 的形式呈现与消息应用程序完全相同的视图。并供参考you can read the docs here

    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: 方法 - 可以阅读here 的文档。这将如下所示:

    - (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 肯定会拒绝该应用程序。

    【讨论】:

    • 我们采取了第二条路线;几乎和你描述的一样。他们仍然让我们失望。唯一不同的是,我们在 didFinishWithResult 中没有 switch-case - 无论结果如何,我们都会关闭控制器。
    • 啊,我刚刚阅读了很多关于您的情况的信息,我认为这是 Apple 不愿意改变的事情之一。在应用程序中为假装农场购买东西似乎是可以的 - 他们在那里获得收益 - 但不捐赠给慈善机构。我想选项是等待它并指示您的用户输入短语的单词(也许您可以自动将文本复制到剪贴板以使该过程更容易和对用户更友好)。
    • 令人讨厌的部分是我们之前已经通过捐赠应用程序多次这样做了。现在我们必须向我们的客户解释,Apple 改变了主意。剪贴板的想法很好;但需要更多的用户指导而不是它的价值。为这些想法喝彩。
    • 没问题。祝你好运与这一切。你会认为非营利组织会有更多的回旋余地。
    • 我知道这是一个旧线程,但您可以使用此答案中的第一个选项并让它自动填充消息正文(这就是我认为的问题)。完全按照说明使用,但将消息正文添加到字符串中,如下所示: URLWithString:@"sms:+1234567890&body=this is the message text"
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2020-06-05
    • 2011-07-27
    • 2011-11-20
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    相关资源
    最近更新 更多