全部产品
云市场

用户反馈(Feedback)iOS、android(安卓)平台:提交反馈时显示参数错误。

更新时间:2017-09-29 17:47:14

问题描述:

提交页面时显示,参数错误。

param_error

这个一般是 Appkey 与 AppSecrect 参数错误导致的,排查方法:

  • 一方面可以与后台数据比对,排查该值是否正确,比如有可能是:项目中的 AppKey 或 AppSecret 与控制台中的没完全对应。
  • 如果值正确,那么需要排查是否为内存方面的问题,导致网络请求时没有发送到服务端。一般为 YWFeedbackKit 对象被提前释放。

下面举例说明一下第二种情况:

比如有用户采用下面的方式打开用户反馈页面:

  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. FeedbackHelper *helper = [FeedbackHelper new];
  4. [helper openFeedbackViewController];
  5. }

FeedbackHelper 中有下面的逻辑:

  1. @interface FeedbackHelper ()<UISplitViewControllerDelegate>
  2. @property (nonatomic, strong) YWFeedbackKit *feedbackKit;
  3. @end
  4. - (YWFeedbackKit *)feedbackKit {
  5. if (!_feedbackKit) {
  6. _feedbackKit = [[YWFeedbackKit alloc] initWithAppKey:kAppKey appSecret:kAppSecret];
  7. }
  8. return _feedbackKit;
  9. }
  10. /** 打开用户反馈页面 */
  11. - (void)openFeedbackViewController {
  12. [self.feedbackKit makeFeedbackViewControllerWithCompletionBlock:^(YWFeedbackViewController *viewController, NSError *error) {
  13. if (viewController != nil) {
  14. UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:viewController];
  15. [ [ViewController getInstance] presentViewController:nav animated:YES completion:nil];
  16. [viewController setCloseBlock:^(UIViewController *aParentController){
  17. [aParentController dismissViewControllerAnimated:YES completion:nil];
  18. }];
  19. } else {
  20. /** 使用自定义的方式抛出error时,此部分可以注释掉 */
  21. NSString *title = [error.userInfo objectForKey:@"msg"]?:@"接口调用失败,请保持网络通畅!";
  22. NSLog(@"%@", title);
  23. }
  24. }];
  25. }

我们可以看到,当打开页面后,helper 对象就被释放掉了,于是 self.feedbackKit 也就被释放掉了,进而导致属性 Appkey 与 AppSecrect 都被释放掉,发送网络请求后。

改为:

  1. FeedbackHelper *helper = [FeedbackHelper sharedInstance];
  2. [helper openFeedbackViewController];

或者将 FeedbackHelper *helper 设置为属性:

  1. @interface ViewController ()
  2. @property (nonatomic, strong) FeedbackHelper *helper;
  3. @end
  1. - (void)viewDidLoad {
  2. [super viewDidLoad];
  3. self.helper = [FeedbackHelper new];
  4. [helper openFeedbackViewController];
  5. }

防止了 FeedbackKit 对象被释放。从而也就保证了 Appkey 与 AppSecrect 值在内存里不会被提前释放,后序网络请求时不会出现参数错误。