您的位置:首页 > 移动开发 > IOS开发

ios如何利用系统邮件发送反馈 代码

2013-04-21 10:25 381 查看
    主要是使用MFMailComposeViewController  这个类,包装下就ok.   

  1.  

将ios的appDelegate类  的laungh函数中,将相应的代码修改为:

[cpp] view
plaincopy

// Set RootViewController to window  

if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)  

{  

    // warning: addSubView doesn't work on iOS6  

     [window setRootViewController:viewController];  

    [window addSubview: viewController.view];  

}  

else  

{  

    // use this method on ios6  

    [window setRootViewController:viewController];  

}  

   
主要目的是 当SDK< 6.0的时候,也设置  
    [window  setRootViewController:viewController];

   以免后面调用 window.rootViewController的时候crash.

2.   头文件内容如下:

   @interface EmailIOS : UIViewController <MFMailComposeViewControllerDelegate>
{
MFMailComposeViewController* mailPicker;
UIWindow * window;
}

- (void)SendMail;

@end

3. *.mm文件实现如下:

   @implementation EmailIOS

- (void)SendMail
{
if (![MFMailComposeViewController canSendMail])
{
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:nil
message:[NSString stringWithUTF8String:LanguageManager::sharedLanguageManager()->getLocalizedString("Please configure your Email first").c_str()]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];

return ;
}

if(mailPicker != nil)
{
[mailPicker release];
}

mailPicker = [[MFMailComposeViewController alloc] init];
mailPicker.mailComposeDelegate = self;
mailPicker.navigationBar.tintColor=[UIColor colorWithRed:(11.0/255.0) green:(81.0/255.0) blue:(112.0/255.0) alpha:1];
// mailPicker.navigationBar.tintColor=[UIColor colorWithRed:(90.0/255.0) green:(182.0/255.0) blue:(45.0/255.0) alpha:1];

NSString* strSubject = [NSString stringWithFormat:@"XXX APP反馈"];
[mailPicker setSubject:strSubject];

// Set up recipients
NSArray *toRecipients = [NSArray arrayWithObject:@"XXX@fuckU.com"];
[mailPicker setToRecipients:toRecipients];

NSString * device = [[UIDevice currentDevice] model];
NSString * ios = [[UIDevice currentDevice] systemVersion];

NSString *body = [NSString stringWithFormat:@"请留下您的宝贵建议和意见:\n\n\n以下信息有助于我们确认您的问题,建议保留。\nApp id:\nApp Version: %s\nDevice: %@\nOS Version: %@\n", GAME_VERSION, device, ios];
[mailPicker setMessageBody:body isHTML:NO];

[self presentModalViewController:mailPicker animated:YES];

mailPicker.view.frame = [UIScreen mainScreen].bounds;

window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];

if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
{
// warning: addSubView doesn't work on iOS6
[window addSubview: mailPicker.view];
}
else
{
// use this method on ios6
window.rootViewController = self;
[window setRootViewController:self];
}

[window makeKeyAndVisible];

// cocos2d::CCDirector::sharedDirector()->
//
// [[[CCDirector sharedDirector] view] insertSubview:mailPicker.view atIndex:30];
}

- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error
{
NSString * message;

// Notifies users about errors associated with the interface
switch (result)
{
case MFMailComposeResultSent:
{
message = @"Successfully sent!";

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Email"
message:message
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
break;
case MFMailComposeResultFailed:
{
//message = @"Result: failed";
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Email"
message:[NSString stringWithFormat:@"Error! Please try again later. (error msg = %@)", @"Failed to send email"]
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
break;
default:
{
//message = @"Result: not sent";
//DLog(@"%@",message);
}
break;
}

//add 的时候是分版本的,所以这里也是分版本,否则crash
if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)
{
[mailPicker.view removeFromSuperview];
}
else
{
[mailPicker dismissModalViewControllerAnimated:YES];
}

[mailPicker release];
mailPicker = nil;

//这个地方不需要remove self

[window removeFromSuperview];
[window release];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
return UIInterfaceOrientationIsLandscape( interfaceOrientation );
}

// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead
- (NSUInteger) supportedInterfaceOrientations{
#ifdef __IPHONE_6_0
return UIInterfaceOrientationMaskLandscape;
#endif
return 0;
}

- (BOOL) shouldAutorotate {
return YES;
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: