有没有在iOS中启动Messages应用程序的另一种方法? (用于捐款)

问题描述:

我们正在尝试提交一个可以发送慈善短信捐赠的iOS应用。过去我们已经完成了许多这些,没有问题;但苹果不再愿意接受我们的方法并拒绝了我们的应用程序。有没有在iOS中启动Messages应用程序的另一种方法? (用于捐款)

他们声称该应用程序不符合指南21.2的要求。那就是:

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

在过去的完成,并且在当前的应用程序,我们在使用MFMessageComposeViewControllerMessageUI构建SMS消息的框架。我们使用这个,因为;作为短代码的捐赠,我们需要能够在消息中编写关键字。

在调解中心有点背的往复的(和拒绝纠纷)我可以摆脱苹果的什么我们应该做的最多的是后:

发送短信从应用程序内可能不符合App Store指南。

的短信链接应该推出的消息,使捐赠。

我们可以使用sms:URL scheme启动消息应用程序中的某个数值,但这种方法并不能让我们添加我们需要的关键字。


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

我们的后备选择是放弃自己建立短信,并有一个告警,告知用户“文字YYYY到ZZZZ”,这是一个非常糟糕的用户体验。


更新(2013年3月5日):

我们与我们的警惕,只有后备选项再次重新提交应用程序...它再次被否决出于同样的原因。我们再次与苹果竞争。


更新(2013年3月6日):

后严厉的消息,苹果解释明显...应用已通过提交。

我写道:

我们不得不同意。该应用不包括在应用内收集慈善捐款的能力。它只会通知用户他们如何捐赠。

所以;如果你有同样的问题,我建议在开始“修复”你的应用程序之前先尝试抱怨。

Yes和No.

在基本层面:NO。我已浏览了文档,并且在外部调用消息应用程序时,您(非常沮丧地)无法为您的消息设置正文。

您只能:

  1. 打开邮件应用

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

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

更复杂:是。以下是用正文发送短信的方法和代码。它呈现一个完全像消息应用程序一样的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]; 
        } 
    } 
    

  4. 上面的代码将无法发送短信或取消的观点,因为我们还没有实现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应该从文档中删除它。关键是if语句canSendText。如果这个(或者案例开关didFinishWithResult)没有实现,Apple肯定会拒绝该应用。

开始=“3”>
+0

我们采取了第二条路线;几乎和你描述的一样。他们仍然失败了我们。我们做的唯一不同的是,我们在didFinishWithResult中没有开关箱 - 我们关闭控制器而不管结果如何。 – Wex 2013-02-14 11:06:45

+0

啊,我刚刚读了很多关于你的情况,我认为它是苹果不愿意改变的事情之一。在应用程序内购买假装农场的东西似乎没有问题 - 他们可以在那里获得裁剪 - 但不会捐赠给慈善机构。我想这些选项是等待它,并指示你的用户输入短语的单词(也许你可以自动将文本复制到剪贴板,使过程更容易,更方便用户)。 – Patrick 2013-02-14 11:27:26

+0

令人讨厌的部分是,我们用捐赠应用程序在几次之前完成了这项工作。现在我们必须向我们的客户解释苹果已经改变了心态。剪贴板的想法很好,但需要更多的用户指导,而不是价值。欢呼的思想。 – Wex 2013-02-15 16:34:42

你也可以设置身体,但是你必须逃避字符串。

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

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

我不确定这是否总是以'sms:'方式这样,但现在看起来是这样。 – Wex 2016-03-17 04:08:31