6

私は長い間、このようにプログラムで SMS を送信しています。iOS6では問題なく動作しました。

しかし、iOS7 へのアップデート後、一部のユーザーはアプリに問題を抱えています。彼らはアプリをアンインストールする必要があります-iPhoneを再起動します-再インストールすると機能します.電話を再起動せずに再インストールするだけでも機能しません.

この本当に厄介な問題の理由は何でしょうか?

さらに、この手順の後、複数の SMS を送信できる場合もありますが、iPhone の SMS ダイアログの表示が非常に遅くなり、iPhone を再起動するまで SMS が再送信されません。アプリを停止して再起動するだけでは役に立ちません。

通常の SMS コードは次のとおりです。

MFMessageComposeViewController *messageVC = [[MFMessageComposeViewController alloc] init];
[messageVC setMessageComposeDelegate:self];
if ([MFMessageComposeViewController canSendText]) {

    NSString *smsString = [NSString stringWithFormat:@"bla bla bla"];
    messageVC.body = smsString;
    messageVC.recipients = @[userPhone];
    messageVC.messageComposeDelegate = self;
[self presentViewController:messageVC animated:YES completion:nil];
}

iOS5.1 ユーザーを引き続きサポートする必要があるため、Deployment Target 5.1 を備えた最新の Xcode 5.0 を使用してアプリの新しいバージョンをリリースしました。

4

1 に答える 1

0

問題の原因を特定するのに十分な情報がありません。ところで、なぜ messageComposeDelegate を 2 回設定しているのですか?

これは、iOS 7 および iOS 8 を実行している自分のデバイスで動作する、変更した Apple の最新のサンプル コードです。必ず MessageUI.framework をインポートしてください。

/* -------------------------------------------------------------------------------
    showSMSPicker:
    IBAction for the Compose SMS button. 
   ------------------------------------------------------------------------------- */
- (IBAction)showSMSPicker:(id)sender
{
    /* Checks that the current device can send SMS messages. If no, [[MFMessageComposeViewController alloc] init] will return nil and the app will
     crash when -presentViewController:animated:completion: is called with a nil view controller */

    if ([MFMessageComposeViewController canSendText])
        // The device can send email.
    {
        [self displaySMSComposerSheet];
    }
    else
        // The device can not send email.
    {
        self.feedbackMsg.hidden = NO;
        self.feedbackMsg.text = @"Device not configured to send SMS.";
    }
}


/* -------------------------------------------------------------------------------
    displayMailComposerSheet
    Displays an SMS composition interface inside the application.
   ------------------------------------------------------------------------------- */

- (void)displaySMSComposerSheet
{
    MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];
    picker.messageComposeDelegate = self;

    /*  One or more preconfigured recipients can be specified. The user has the option to remove 
     or add recipients from the message composer view controller */
    /* picker.recipients = @[@"Phone number here"]; */

    // Message body
    picker.body = @"This is a message about how great this app is. Please download it by clicking on the link below.";

    [self presentViewController:picker animated:YES completion:nil];
}

/* -------------------------------------------------------------------------------
    messageComposeViewController:didFinishWithResult:
    Dismisses the message composition interface when users tap Cancel or Send.
    Proceeds to update the feedback message field with the result of the
    operation.
   ------------------------------------------------------------------------------- */

- (void)messageComposeViewController:(MFMessageComposeViewController *)controller
                 didFinishWithResult:(MessageComposeResult)result
{
    self.feedbackMsg.hidden = NO;
    // Notifies users about errors associated with the interface
    switch (result)
    {
        case MessageComposeResultCancelled:
            self.feedbackMsg.text = @"Result: SMS sending canceled";
            break;
        case MessageComposeResultSent:
            self.feedbackMsg.text = @"Result: SMS sent";
            break;
        case MessageComposeResultFailed:
            self.feedbackMsg.text = @"Result: SMS sending failed";
            break;
        default:
            self.feedbackMsg.text = @"Result: SMS not sent";
            break;
    }

    [self dismissViewControllerAnimated:YES completion:NULL];
}
于 2014-08-15T22:19:32.590 に答える