问题详述
提交页面时显示,参数错误:
问题分析
这个一般是Appkey与AppSecrect参数错误导致的。
解决方法
一方面可以与后台数据比对,排查该值是否正确,比如有可能是:项目中的AppKey或AppSecret与控制台中的没完全对应。
如果值正确,那么需要排查是否为内存方面的问题,导致网络请求时没有发送到服务端。一般为
YWFeedbackKit
对象被提前释放。Android端,请先升级到3.3.1版本后进行提交反馈测试。
下面举例说明一下第二种情况:
比如有用户采用下面的方式打开用户反馈页面:
- (void)viewDidLoad {
[super viewDidLoad];
FeedbackHelper *helper = [FeedbackHelper new];
[helper openFeedbackViewController];
}
在 FeedbackHelper
中有下面的逻辑:
@interface FeedbackHelper ()<UISplitViewControllerDelegate>
@property (nonatomic, strong) YWFeedbackKit *feedbackKit;
@end
- (YWFeedbackKit *)feedbackKit {
if (!_feedbackKit) {
_feedbackKit = [[YWFeedbackKit alloc] initWithAppKey:kAppKey appSecret:kAppSecret];
}
return _feedbackKit;
}
/** 打开用户反馈页面 */
- (void)openFeedbackViewController {
[self.feedbackKit makeFeedbackViewControllerWithCompletionBlock:^(YWFeedbackViewController *viewController, NSError *error) {
if (viewController != nil) {
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
[ [ViewController getInstance] presentViewController:nav animated:YES completion:nil];
[viewController setCloseBlock:^(UIViewController *aParentController){
[aParentController dismissViewControllerAnimated:YES completion:nil];
}];
} else {
/** 使用自定义的方式抛出error时,此部分可以注释掉 */
NSString *title = [error.userInfo objectForKey:@"msg"]?:@"接口调用失败,请保持网络通畅!";
NSLog(@"%@", title);
}
}];
}
我们可以看到,当打开页面后,helper
对象就被释放掉了,于是self.feedbackKit
也就被释放掉了,进而导致属性Appkey与AppSecrect都被释放掉,发送网络请求后。
改为:
FeedbackHelper *helper = [FeedbackHelper sharedInstance];
[helper openFeedbackViewController];
或者将 FeedbackHelper *helper
设置为属性:
@interface ViewController ()
@property (nonatomic, strong) FeedbackHelper *helper;
@end
- (void)viewDidLoad {
[super viewDidLoad];
self.helper = [FeedbackHelper new];
[helper openFeedbackViewController];
}
防止了FeedbackKit对象被释放。从而也就保证了Appkey与AppSecrect值在内存里不会被提前释放,后序网络请求时不会出现参数错误。
文档内容是否对您有帮助?