iOS集成阿里百川用户反馈功能及给app评分

用户反馈功能几乎是每个app都有的一个功能点,通过反馈功能实现与用户的连接、沟通,随时随地收集用户意见反馈和Bug报告,即时和用户保持沟通,在一定程度上提升了app的竞争力。而给app评分也是一个常见的功能。接下来和大家分享如何在自己的工程中集入阿里百川的用户反馈模块,另外介绍如何实现对app的评分功能。

一、用户反馈功能
1.首先需要到阿里百川申请appkey.同时生成自己需要的SDK并下载下来,将SDK导入到自己的工程中,另外将阿里百川的demo下载下来,把里面的TWMessageBarManager包也导入自己的工程中。

2.在工程中添加以下的依赖库:

UIKit.framework
AddressBook.framework
SystemConfiguration.framework
CoreLocation.framework
CoreTelephony.framework
CoreData.framework
libz.tbd
libstdc++.6.0.9.tbd
MobileCoreServices.framework
ImageIO.framework
AudioToolbox.framework
AVFoundation.framework
AssetsLibrary.framework
CoreMotion.framework

3.导入头文件

#import <YWFeedbackFMWK/YWFeedbackKit.h>
#import "TWMessageBarManager.h"

4.实现反馈功能

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"意见反馈与给app评分";
    self.view.backgroundColor = [UIColor whiteColor];
//    在阿里百川申请的appkey
    self.appKey = @"appkey";
    self.environment = YWEnvironmentRelease;
    
    UIButton *feedbackButton = [UIButton buttonWithType:UIButtonTypeSystem];
    feedbackButton.frame = CGRectMake(100, 150, 100, 50);
    [self.view addSubview:feedbackButton];
    [feedbackButton setTitle:@"意见反馈" forState:UIControlStateNormal];
    [feedbackButton addTarget:self action:@selector(actionOpenFeedback) forControlEvents:UIControlEventTouchUpInside];
    
    UIButton *markButton = [UIButton buttonWithType:UIButtonTypeSystem];
    markButton .frame = CGRectMake(100, 200, 100, 50);
    [self.view addSubview:markButton];
    [markButton setTitle:@"评分" forState:UIControlStateNormal];
    [markButton addTarget:self action:@selector(markButtonAction) forControlEvents:UIControlEventTouchUpInside];
    // Do any additional setup after loading the view, typically from a nib.
}
#pragma mark -- 调起意见反馈
- (void )actionOpenFeedback{
    self.tabBarController.tabBar.hidden = YES;
    
    self.appKey = @"appkey";
    
    self.feedbackKit = [[YWFeedbackKit alloc] initWithAppKey:self.appKey];
    
    _feedbackKit.environment = self.environment;
    
#warning 设置App自定义扩展反馈数据
    _feedbackKit.extInfo = @{@"loginTime":[[NSDate date] description],
                             @"visitPath":@"登陆->关于->反馈",
                             @"应用自定义扩展信息":@"开发者可以根据需要设置不同的自定义信息,方便在反馈系统中查看"};
#warning 自定义反馈页面配置
    _feedbackKit.customUIPlist = [NSDictionary dictionaryWithObjectsAndKeys:@"/te\'st\\Value1\"", @"testKey1", @"test<script>alert(\"error.yaochen\")</alert>Value2", @"testKey2", nil];
    
    [self _openFeedbackViewController];
}


#pragma mark 弹出反馈页面
- (void)_openFeedbackViewController
{
    __weak typeof(self) weakSelf = self;
    
    [_feedbackKit makeFeedbackViewControllerWithCompletionBlock:^(YWFeedbackViewController *viewController, NSError *error) {
        if ( viewController != nil ) {
#warning 这里可以设置你需要显示的标题以及nav的leftBarButtonItem,rightBarButtonItem
            viewController.title = @"意见反馈";
            //
            UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
            
            viewController.navigationController.navigationBar.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor colorWithRed:102/255.0 green:102/255.0 blue:102/255.0 alpha:1],NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:18]};
            [self.navigationController pushViewController:viewController animated:YES];
            
            viewController.navigationController.interactivePopGestureRecognizer.delegate = (id)self;
            self.navigationController.interactivePopGestureRecognizer.delegate=(id)self;
            viewController.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:weakSelf action:@selector(cancelButtonAction)];
            viewController.navigationItem.leftBarButtonItem.tintColor = [UIColor colorWithRed:0.59 green:0.59 blue:0.59 alpha:1];
            viewController.tabBarController.tabBar.hidden = YES;
            
            
            __weak typeof(nav) weakNav = nav;
            
            [viewController setOpenURLBlock:^(NSString *aURLString, UIViewController *aParentController) {
                UIViewController *webVC = [[UIViewController alloc] initWithNibName:nil bundle:nil];
                UIWebView *webView = [[UIWebView alloc] initWithFrame:webVC.view.bounds];
                webView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
                
                [webVC.view addSubview:webView];
                [weakNav pushViewController:webVC animated:YES];
                [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:aURLString]]];
            }];
        } else {
            NSString *title = [error.userInfo objectForKey:@"msg"]?:@"接口调用失败,请保持网络通畅!";
            
            [[TWMessageBarManager sharedInstance] showMessageWithTitle:title description:nil
                                                                  type:TWMessageBarMessageTypeError];
        }
    }];
}

-(void)cancelButtonAction{
    [self.navigationController popViewControllerAnimated:YES];
}

二、给app评分有两种方式,一种是跳转到AppStore中评分,另外一种是利用StoreKit在应用内实现评分,但是第二方法种有点慢。

1.直接跳转到AppStore

// 跳转到AppStore评分,xxxxxx是app的ID,可在AppStore上查看链接获取URL
   NSString *baseUrl = @"https://itunes.apple.com/cn/app/jing-dai/idxxxxxx?mt=8" ;
   [[UIApplication sharedApplication]openURL:[NSURL URLWithString:baseUrl]];

2.利用StoreKit在应用内实现评分
首先导入#import <StoreKit/StoreKit.h>
签代理SKStoreProductViewControllerDelegate
实现方法

//  应用内给app评分,可返回之前的页面
    SKStoreProductViewController *storeProductVC =[[SKStoreProductViewController alloc]init];
    
        storeProductVC.delegate = self;
    
        //第一个参数为应用标识id构成的字典。第二个参数是一个block回调。
    
        [storeProductVC loadProductWithParameters:@{SKStoreProductParameterITunesItemIdentifier: @"1053328148" } completionBlock:^(BOOL result, NSError *error) {
    
            if (result) {

                [self presentViewController:storeProductVC animated:YES completion:^{
    
                }];
   
            }else{
    
                NSLog(@"错误:%@" ,error);
    
            }
    
        }];

实现代理方法

//SKStoreProductViewController代理方法

-(void)productViewControllerDidFinish:(SKStoreProductViewController*)viewController

{
    
    //返回上一个页面
    
    [self dismissViewControllerAnimated:YES completion:nil];
    
}


这样,意见反馈和评分的功能就实现了,很简单。用户发送意见反馈时,我们可以直接到阿里百川的后台给用户进行回复。
意见反馈效果图如下:

意见反馈

demo地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容