12

慈善SMS寄付を行うiOSアプリを提出しようとしています。過去にこれらの多くを問題なく実行しました。しかし、Appleはもはや私たちのアプローチを受け入れる気がなく、私たちのアプリを拒否しました。

彼らの主張は、アプリがガイドラインのポイント21.2に準拠していないというものです。これは:

21.2寄付の収集は、SafariのWebサイトまたはSMSを介して行う必要があります

過去、そしてこの現在のアプリではMFMessageComposeViewControllerMessageUIフレームワークでSMSメッセージを作成するために使用しています。これを使用する理由は次のとおりです。ショートコードへの寄付であるため、メッセージにキーワードを記述できる必要があります。

解決センター(および拒否紛争)で少し行ったり来たりした後、私たちがやるべきことについてAppleから抜け出すことができるのは、次のとおりです。

アプリ内からSMSメッセージを送信すると、AppStoreのガイドラインに準拠していない可能性があります。

SMSリンクは、寄付を行うためにメッセージを起動する必要があります。

sms: URLスキームを使用して、特定の数のメッセージアプリを起動できますが、その方法では、必要なキーワードを追加できません。


だから問題は:メッセージアプリを起動する別の方法を知っている人はいますか?

私たちのフォールバックオプションは、SMSメッセージの作成をあきらめて、ユーザーエクスペリエンスがかなり悪い「TextYYYYtoZZZZ 」をユーザーに通知するアラートを設定することです。


更新(2013年3月5日):

アラートのみのフォールバックオプションを使用してアプリを再送信しました...同じ理由で再度拒否されました。繰り返しになりますが、Appleと争っています。


更新(2013年3月6日):

明らかなことを説明するAppleへの厳しいメッセージの後...アプリは提出を通過しました。

私が書いた:

私たちは反対しなければなりません。アプリには、アプリ内で慈善寄付を集める機能は含まれていません。それは彼らがどのように寄付することができるかについてユーザーに知らせるだけです。

それで; 同じ問題が発生した場合は、アプリを「修正」する前に、まず文句を言うことをお勧めします。

4

2 に答える 2

20

はいといいえ。

基本的なレベル:いいえ。私はドキュメントを調べましたが、メッセージアプリを外部から呼び出すときに、(イライラするほど)メッセージの本文を設定できません。

だけ可能です:

  1. メッセージアプリを開く

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:"]];
    
  2. メッセージを送信する番号を入力してください

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

より複雑:はい。これは、本文付きのSMSを送信するためのメソッドとコードです。メッセージアプリとまったく同じビューをModalViewとして表示します。また、参考のために、ここでドキュメントを読むことができます

  1. MessageUIフレームワークをプロジェクトにインポートします

  2. これらを、メッセージを送信するアクションがオンになっているビューの.hに追加します(私の場合、ボタンが1つある単純なビュー)。

    #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のように)、アプリに必要なものをすべて表示したりできます。

この2番目の方法は承認されるか、Appleがドキュメントから削除する必要があると確信しています。ただし、重要なのはcanSendTextifステートメントです。これ(またはのケーススイッチ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 に答える