iOS-发短信

在APP内如何发短信呢?

MFMessageComposeViewController这个类提供了发短信的功能。

例子

guard MFMessageComposeViewController.canSendText() else {
            print("不能发送短信")
            return
        }
        let messageVC = MFMessageComposeViewController()
        messageVC.messageComposeDelegate = self // 代理
        messageVC.recipients = ["18888888888"] // 收件人
        messageVC.body = "短信内容" // 内容
        // 发送主题
        if MFMessageComposeViewController.canSendSubject() {
            messageVC.subject = "ICE"
        }
        // 发送附件
        if MFMessageComposeViewController.canSendAttachments() {
            // 路径添加
            if let path = Bundle.main.path(forResource: "Info", ofType: "plist") {
                messageVC.addAttachmentURL(URL(fileURLWithPath: path), withAlternateFilename: "Info.plist")
            }
            // NSData添加
            if MFMessageComposeViewController.isSupportedAttachmentUTI("public.png") {
                // See [Uniform Type Identifiers Reference](https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/UTIRef/Introduction/Introduction.html)
                if let image = UIImage(named: "qq") {
                    if let data = UIImagePNGRepresentation(image) {
                        // 添加文件
                        messageVC.addAttachmentData(data, typeIdentifier: "public.png", filename: "qq.png")
                    }
                }
            }
        }
        // messageVC.disableUserAttachments() // 禁用添加附件按钮
        self.present(messageVC, animated: true, completion: nil)

发送短信的结果
typedef NS_ENUM(NSInteger, MessageComposeResult) {
    MessageComposeResultCancelled,//取消
    MessageComposeResultSent,//已发送
    MessageComposeResultFailed//发送失败
} NS_ENUM_AVAILABLE_IOS(4_0);



/*!
 @constant  给定的附件URL
*/
extern NSString *const MFMessageComposeViewControllerAttachmentURL;


/*!
 @constant  附件名
 */
extern NSString *const MFMessageComposeViewControllerAttachmentAlternateFilename;


/*!
 @const      MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
 @abstract   Notification posted when the value of +[MFMessageComposeViewController canSendText] has changed.
 @discussion 在[MFMessageComposeViewController canSendText]的值改变后会改变这个通知的值
*/
extern NSString *const MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);

/*!
 @const      MFMessageComposeViewControllerTextMessageAvailabilityKey
 @abstract   UserInfo key for MFMessageComposeViewControllerTextMessageAvailabilityDidChangeNotification
             containing the value of +[MFMessageComposeViewController canSendText]
 @discussion 这个参数的值和+[MFMessageComposeViewController canSendText]一样
*/
extern NSString *const MFMessageComposeViewControllerTextMessageAvailabilityKey __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);



/*!
 @method     canSendText
 @abstract   Returns YES if the user has set up the device for sending text only messages.
 @discussion If the return value is YES, the client can set the recipients and body of the message.
             If the return value is NO, the client may notify the user of the failure, or the
             client may open an SMS URL via -[UIApplication openURL:].
 */
+ (BOOL)canSendText  __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0);

/*!
 @method     canSendSubject
 @abstract   Returns YES if the user has set up the device for including subjects in messages..
 */
+ (BOOL)canSendSubject __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);

/*!
 @method     canSendAttachments
 @abstract   Returns YES if the user has set up the device for including attachments in messages..
 */
+ (BOOL)canSendAttachments __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);


/*!
 @method     isSupportedAttachmentUTI:
 @abstract   Returns YESif the attachment at the specified URL could be accepted by the current composition.
 @discussion If the return value is YES, the UTI is acceptable for attachment to a message, a return value of NO
 indicates that the given UTI is unsupported.
 */
+ (BOOL)isSupportedAttachmentUTI:(NSString *)uti __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);

/*!
 @property   recipients
 @abstract   This property sets the initial value of the To field for the message to the specified addresses.
 @discussion 收件人
 */
@property(nonatomic,copy,nullable) NSArray *recipients /*__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0)*/;



/*!
 @property   body
 @abstract   This property sets the initial value of the body of the message to the specified content.
 @discussion 短信内容
 */
@property(nonatomic,copy,nullable) NSString *body /*__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_4_0)*/;

/*!
 @property   subject
 @abstract   This property sets the initial value of the subject of the message to the specified content.
 @discussion 消息主题
 */
@property(nonatomic,copy,nullable) NSString *subject /*__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0)*/;

/*!
 @property   attachments
 @abstract   This property returns an NSArray of NSDictionaries describing the properties of the current attachments.
 @discussion 以数组包含字典的形式的附件
             See MFMessageComposeViewControllerAttachmentURL, MFMessageComposeViewControllerAttachmentAlternateFilename.
 */
@property(nonatomic,copy,readonly,nullable) NSArray *attachments /*__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0)*/;


/*!
 @property   message
 @abstract   This property sets the initial interactive message.
 */
@property(nonatomic,copy,nullable) MSMessage *message __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_10_0);



/*!
 @method     addAttachmentURL:withAlternateFilename:
 @abstract   Returns YESif the attachment at the specified URL was added to the composition successfully.
 @discussion 如果返回值是肯定的,附件添加到数组。如果返回值是NIL,附件没有添加到组合。所有附件url必须文件的url。该文件网址不能为NIL。备用文件名会显示给用户的leiu附件URL。备用文件名可能是NIL。
 */
- (BOOL)addAttachmentURL:(NSURL *)attachmentURL withAlternateFilename:(nullable NSString *)alternateFilename __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);

/*!
 @method     addAttachmentData:typeIdentifier:filename:
 @abstract   Returns YESif the attachment was added to the composition successfully.
 @discussion 如果返回值是肯定的,附件添加到组合。如果返回值是NIL,附件没有添加到组合。数据和typeIdentifer必须非nil。typeIdentifier应该是一个有效的统一类型标识符。
 */
- (BOOL)addAttachmentData:(NSData *)attachmentData typeIdentifier:(NSString *)uti filename:(NSString *)filename __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_7_0);


@protocol MFMessageComposeViewControllerDelegate 
@required
/*!
 @method     messageComposeViewController:didFinishWithResult:
 @abstract   Delegate callback which is called upon user's completion of message composition.
 @discussion 发送短信的结果回调
 @param      controller   The MFMessageComposeViewController instance which is returning the result.
 @param      result       MessageComposeResult indicating how the user chose to complete the composition process.
 */
- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result;

你可能感兴趣的:(iOS-发短信)