【问题标题】:How to manage user feedback?如何管理用户反馈?
【发布时间】:2021-03-29 18:58:51
【问题描述】:

我正在开发一个应用程序,并希望允许用户提供反馈、提出问题等。我这样做是为了改善用户体验并为用户提供与我交流的途径。我能想到的与用户交流的最佳方式是通过电子邮件。所以我创建了一个两步表单,他们首先在第一步中输入他们的电子邮件,然后在第二步中描述他们的问题、疑问或反馈。一旦他们提交了表单,就会向我发送一封电子邮件,其中包含用户的电子邮件和描述。从那时起,我会通过电子邮件回复用户并解决他们的问题。

我有几个问题:

  1. 这是管理用户反馈的最佳方式吗?有没有更好的办法?

  2. 我必须使用mailer package 才能使这一切成为可能,但是,它要求我在代码中提供电子邮件的密码。除了必须处理与暴露我的密码相关的问题(可能被黑客利用)之外,我似乎还必须使用这个包给自己发送一封电子邮件。有什么解决方法吗?

【问题讨论】:

  • 您管理服务器环境吗?
  • 我通过 firebase 做所有事情

标签: flutter dart user-experience


【解决方案1】:
dependencies:
  in_app_review: ^2.0.1
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:in_app_review/in_app_review.dart';

void main() => runApp(MyApp());

enum Availability { LOADING, AVAILABLE, UNAVAILABLE }

extension on Availability {
  String stringify() => this.toString().split('.').last;
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final InAppReview _inAppReview = InAppReview.instance;
  String _appStoreId = '';
  String _microsoftStoreId = '';
  Availability _availability = Availability.LOADING;

  @override
  void initState() {
    super.initState();

    WidgetsBinding.instance!.addPostFrameCallback((_) async {
      try {
        final isAvailable = await _inAppReview.isAvailable();

        setState(() {
          _availability = isAvailable && !Platform.isAndroid
              ? Availability.AVAILABLE
              : Availability.UNAVAILABLE;
        });
      } catch (e) {
        setState(() => _availability = Availability.UNAVAILABLE);
      }
    });
  }

  void _setAppStoreId(String id) => _appStoreId = id;

  void _setMicrosoftStoreId(String id) => _microsoftStoreId = id;

  Future<void> _requestReview() => _inAppReview.requestReview();

  Future<void> _openStoreListing() => _inAppReview.openStoreListing(
        appStoreId: _appStoreId,
        microsoftStoreId: _microsoftStoreId,
      );

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('InAppReview Example')),
        body: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('InAppReview status: ${_availability.stringify()}'),
            TextField(
              onChanged: _setAppStoreId,
              decoration: InputDecoration(hintText: 'App Store ID'),
            ),
            TextField(
              onChanged: _setMicrosoftStoreId,
              decoration: InputDecoration(hintText: 'Microsoft Store ID'),
            ),
            ElevatedButton(
              onPressed: _requestReview,
              child: Text('Request Review'),
            ),
            ElevatedButton(
              onPressed: _openStoreListing,
              child: Text('Open Store Listing'),
            ),
          ],
        ),
      ),
    );
  }
}

【讨论】:

    【解决方案2】:

    如第 2 点所述,您必须从您的帐户向自己发送一封电子邮件,这会带来漏洞。

    根据我的经验,如果您不使用服务器环境,则可以使用外部支持服务(票证)并通过包或通过 InAppWebView 添加它。

    这样您就不会有将密码提供给第三方的漏洞,并且您还可以通过电子邮件接收 cmets。

    更复杂的解决方案是在服务器环境中创建从 Flutter 接口接收信息的所有逻辑,并通过您定义的媒介开始通信。

    【讨论】:

    • 您知道任何外部支持服务包吗?
    • 包在 dart no 上,但是我用过这个外部服务。 freshdesk.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2017-06-02
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多