用户意见反馈是App开发中非常重要的一环,有效地听到用户的声音,进而有的放矢地持续改进产品。下面说一下我在“深圳通”中的实践。

因为不考虑单独为用户反馈去做服务端的开发,所以我首先想到的是使用第三方的服务。在这方面友盟是做得挺不错的,只是处于体量的考虑而没有使用,一个简单的App不想因为一个不是核心的功能引入一大堆东西。一直在使用LeanCloud的,发现他们也有用户反馈的模块,看了一下基本够用,遗憾的是不支持推送。

所以在1.6之前,用户反馈我使用的LeanCloud的(其实现在也是),CocoaPod依赖,然后两行代码搞定,非常简洁:

1
2
AVUserFeedbackAgent *agent = [AVUserFeedbackAgent sharedInstance];
[agent showConversations:self title:@"用户反馈" contact:nil];

这样跑了几个月,收到了不少的用户反馈,而我几乎每一条都认真地做了回复,然后就没有然后了,不会再收到用户的回应。

这是因为LeanCloud的有一个天然的缺陷,用户反馈不支持推送,所以如果用户不再次进入到意见反馈界面,根本不知道有开发者的回复。

后来想到了一种开发成本很低而又能轻易让用户感知有回复的解决办法,那就是通过邮件。用户的反馈会以邮件的方式发送到我预设的一个邮箱,因为调用的是系统的邮件功能,所以其实是通过用户自己的邮箱发送,而当我回复这封邮件时,用户也就可以第一时间在收件箱看到了。

需要注意的是,并不是所有的用户都会在iPhone上配置了邮箱(尤其是国内用户),这个时候通过邮箱的方式就是不可用的,好在iOS提供了非常好用的API([MFMailComposeViewController canSendMail]),可以检测用户是否配置了邮箱,如果配置了就使用邮件的方式反馈意见,否则使用LeanCloud的方式。

下面是我最终的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
- (void)feedback
{
if ([MFMailComposeViewController canSendMail]) {
[self emailFeedback];
}
else {
AVUserFeedbackAgent *agent = [AVUserFeedbackAgent sharedInstance];
[agent showConversations:self title:@"用户反馈" contact:nil];
}
}

- (void)emailFeedback
{
MFMailComposeViewController *mailer = [[MFMailComposeViewController alloc] init];
mailer.mailComposeDelegate = self;

[mailer setSubject:@"用户反馈"];

NSArray *toRecipients = @[@"me@15tar.com"];
[mailer setToRecipients:toRecipients];

NSString *emailBody = [NSString stringWithFormat:@"请在此输入您的反馈意见。"];
[mailer setMessageBody:emailBody isHTML:NO];

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

另外,使用MFMailComposeViewController之前必须先引入MessageUI.framework,同时在使用的地方#import <MessageUI/MessageUI.h>