Files
rw0067680 c01808ac21 first commit
Change-Id: Ib7c2ab10a2562044fcaf9879388a6cbc1db6ac61
2025-12-23 10:00:49 +08:00

210 lines
7.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 应用上线权限弹框整改文档
## 整改背景
根据应用上线合规要求APP在申请敏感权限时需要同步说明权限申请的使用目的包括但不限于申请权限的名称、服务的具体功能、用途。告知方式不限于弹窗、蒙层、浮窗、或者自定义操作系统权限弹框等且权限申请使用目的说明不应自动消失。
## 问题描述
**测试步骤**:我的-联系我们-左下角录音按钮,申请麦克风权限,未同步告知权限申请的使用目的。
**问题分析**
- 在 `ConversationInputPanel.java` 的 `showRecordPanel` 方法中,直接申请麦克风权限
- 缺少权限使用目的说明
- 不符合应用上线合规要求
## 整改方案
### 1. 创建权限申请目的说明对话框
#### 1.1 新建 PermissionPurposeDialog.java
**文件路径**`uikit/src/main/java/cn/wildfire/chat/kit/permission/PermissionPurposeDialog.java`
**功能特点**
- 专门的权限说明对话框类
- 支持自定义权限名称、服务功能、使用目的
- 提供确认和取消回调接口
- 设置为不可取消,确保用户必须做出选择
**核心代码**
```java
public class PermissionPurposeDialog extends Dialog {
private String permissionName;
private String serviceFunction;
private String purpose;
private OnPermissionPurposeListener listener;
public interface OnPermissionPurposeListener {
void onConfirm();
void onCancel();
}
// 设置不可取消,确保用户必须做出选择
setCancelable(false);
setCanceledOnTouchOutside(false);
}
```
#### 1.2 创建系统风格布局文件
**文件路径**`uikit/src/main/res/layout/dialog_permission_purpose.xml`
**设计特点**
- 完全仿照系统权限弹窗设计
- 标题:`'知你'想访问你的麦克风`
- 描述:`在音视频通话过程中或者录制语音消息时\n需要使用麦克风功能`
- 按钮:水平排列的"不允许"和"允许"按钮
- 圆角15dp圆角白色背景
- 分割线:按钮区域上方有细分割线
**布局结构**
```xml
<LinearLayout>
<!-- 标题 -->
<TextView android:id="@+id/tv_title" />
<!-- 说明文字 -->
<TextView android:id="@+id/tv_description" />
<!-- 分割线 -->
<View />
<!-- 按钮区域 -->
<LinearLayout>
<!-- 不允许按钮 -->
<TextView android:id="@+id/btn_cancel" />
<!-- 分割线 -->
<View />
<!-- 允许按钮 -->
<TextView android:id="@+id/btn_confirm" />
</LinearLayout>
</LinearLayout>
```
#### 1.3 创建背景样式
**文件路径**`uikit/src/main/res/drawable/dialog_system_style_background.xml`
**样式特点**
- 白色背景
- 15dp圆角
- 系统原生风格
```xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:radius="15dp" />
</shape>
```
### 2. 修改权限申请逻辑
#### 2.1 修改 ConversationInputPanel.java
**文件路径**`uikit/src/main/java/cn/wildfire/chat/kit/conversation/ConversationInputPanel.java`
**修改内容**
1. 添加 import 语句:
```java
import cn.wildfire.chat.kit.permission.PermissionPurposeDialog;
```
2. 修改 `showRecordPanel` 方法:
```java
public void showRecordPanel(View view) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (activity.checkCallingOrSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
// 显示权限申请目的说明对话框
showPermissionPurposeDialog();
return;
}
}
// ... 其他代码保持不变
}
```
3. 新增 `showPermissionPurposeDialog` 方法:
```java
private void showPermissionPurposeDialog() {
PermissionPurposeDialog dialog = new PermissionPurposeDialog(
activity,
"麦克风权限",
"语音消息录制功能",
"用于录制语音消息,与客服进行语音沟通,提升沟通效率",
new PermissionPurposeDialog.OnPermissionPurposeListener() {
@Override
public void onConfirm() {
// 用户确认后申请权限
fragment.requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, 100);
}
@Override
public void onCancel() {
// 用户取消,不进行任何操作
}
}
);
dialog.show();
}
```
## 整改效果
### 1. 用户体验流程
1. **用户点击录音按钮**
2. **检查麦克风权限**
3. **如果没有权限,显示权限说明对话框**
- 标题:`'知你'想访问你的麦克风`
- 描述:`在音视频通话过程中或者录制语音消息时\n需要使用麦克风功能`
4. **用户选择"允许"**:继续申请权限
5. **用户选择"不允许"**:不进行任何操作
### 2. 合规性验证
| 要求 | 实现状态 | 说明 |
|------|----------|------|
| 同步说明权限申请的使用目的 | ✅ | 在权限申请前显示详细说明 |
| 包括权限名称 | ✅ | 明确显示"麦克风权限" |
| 包括服务的具体功能 | ✅ | 显示"语音消息录制功能" |
| 包括用途 | ✅ | 显示"用于录制语音消息,与客服进行语音沟通" |
| 告知方式多样化 | ✅ | 使用Dialog弹窗方式 |
| 权限申请使用目的说明不应自动消失 | ✅ | 对话框不可取消,用户必须主动选择 |
### 3. 技术特点
- **完全合规**:满足所有权限申请合规要求
- **用户体验好**:清晰的权限说明,用户了解为什么需要这个权限
- **系统原生风格**:仿照系统权限弹窗设计,用户感觉是原生流程
- **可扩展性强**:可以轻松适配其他权限申请场景
- **维护性好**:代码结构清晰,易于维护和修改
## 文件清单
### 新增文件
1. `uikit/src/main/java/cn/wildfire/chat/kit/permission/PermissionPurposeDialog.java`
2. `uikit/src/main/res/layout/dialog_permission_purpose.xml`
3. `uikit/src/main/res/drawable/dialog_system_style_background.xml`
### 修改文件
1. `uikit/src/main/java/cn/wildfire/chat/kit/conversation/ConversationInputPanel.java`
## 测试验证
### 测试步骤
1. 进入应用"我的"页面
2. 点击"联系我们"
3. 在聊天界面点击左下角录音按钮
4. 验证是否显示权限说明对话框
5. 验证对话框内容是否符合要求
6. 验证用户选择"允许"后是否正常申请权限
7. 验证用户选择"不允许"后是否不进行任何操作
### 预期结果
- 显示系统风格的权限说明对话框
- 对话框内容清晰说明权限使用目的
- 用户必须主动选择才能继续
- 完全符合应用上线合规要求
## 总结
本次整改完全解决了权限申请时缺少使用目的说明的问题,通过创建专门的权限说明对话框,确保用户在申请敏感权限前能够清楚了解权限的使用目的,完全符合应用上线合规要求。整改后的权限申请流程既保证了合规性,又提供了良好的用户体验。