【1——Android端添加隐私政策和用户协议(unity)1/3】_android 接入隐私政策
前言:这篇仅对于unity 发布Android端上架国内应用商店添加隐私政策、用户协议,隐私政策、用户协议是很重要的东西,没有这个东西,是不上了应用商店的。
对于添加上述二者,我知道有三种方式,第一种和第二种基本一样
1.直接在unity里面新建PrivacyActivity.java,然后自定义一下AndroidManifest,就可以(就是直接在unity里面建java类了)(复杂度 低)
2.从Android studio 里面打出arr包,导入unity 里面使用 (复杂度 高)
3.从unity里面导出android studio 工程,在Android studio里面添加 (复杂度 高)
如何选择,这三种方法,我个人建议,如果只是添加隐私政策、用户协议这种简单的需求,第一种就可以。我会实际演示这三种方式
以下是第二和第三方法的优缺点对比:
classes.jar
和处理资源文件冲突。 2. 如果需要频繁修改 Android 代码,每次都需要重新导出 AAR 包并更新 Unity 项目,流程相对繁琐。因为这个字数比较多,我先介绍一下第三种,第一二种,后续有时间的话会更新
三.第三种方法
从unity里面导出android studio 工程,在Android studio里面添加
步骤介绍,四步走
- 第一步从unity打包出Android studuio 工程文件
- - 第二步 使用Android studio 打开项目
-
我这里选的是Use Android Studio SDK,点击完成后,就打开了
- 第三步,新建一个软件包,(我们把自己写逻辑代码都放在里面,比如隐私协议啊,或者微信登录支付什么的都可以放在这里,软件包的本质就是一个文件夹),具体步骤如下图
右上角,视图选择为项目,Android studio 好几种视图模式,我们这里选择项目
- 第四步,在com.companyName.projcetName,文件夹下新建一个PrivacyActvity活动,(实现我们隐私协议部分),并替换代码,具体如下图
package com.companyName.projectName; //这里修改为你的包名import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.util.TypedValue;import android.webkit.WebView;public class PrivacyActivity extends Activity implements DialogInterface.OnClickListener { private static final String PREFS_NAME = \"PlayerPrefs\"; // SharedPreferences的文件名 private static final String PRIVACY_ACCEPTED_KEY = \"PrivacyAcceptedKey\"; // 用于存储用户是否同意隐私政策的键 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 检查用户是否已经同意隐私政策 if (getPrivacyAccept()) { // 如果已经同意,直接进入Unity主Activity enterUnityActivity(); return; } // 如果未同意,显示隐私政策对话框 showPrivacyDialog(); } private String buildPrivacyHtml() { // 在这里设置隐私政策和用户协议的链接,修改为你的 String userAgreementUrl = \"https://blog.csdn.net/weixin_45478456?type=blog\"; String privacyPolicyUrl = \"https://blog.csdn.net/weixin_45478456?type=blog\"; // 生成隐私政策的HTML内容,具体看你应用用到了什么东西,就写什么,比如用到了传感器就要写出来,不然商店会打回 return \"欢迎使用本应用,在使用本应用前,请您充分阅读并理解 \" + \"<a href=\\\"\" + userAgreementUrl + \"\\\">《用户协议》和\" + \"<a href=\\\"\" + privacyPolicyUrl + \"\\\">《隐私政策》各条;\" + \"
\" + \"1.保护用户隐私是本应用的一项基本政策,本应用不会泄露您的个人信息;\" + \"
\" + \"2.我们会根据您使用的具体功能需要,收集必要的用户信息(如申请设备信息,存储等相关权限);\" + \"
\" + \"3.在您同意App隐私政策后,我们将进行集成SDK的初始化工作,会收集您的android_id、Mac地址、IMEI和应用安装列表,以保障App正常数据统计和安全风控;\" + \"
\" + \"4.当你进入应用时,为了适配你的设备状态,我们会调用设备的重力、加速度等传感器信息,以识别你的设备横竖屏状态\" + \"
\" + \"5.为了方便您的查阅,您可以通过“设置-关于我们”重新查看该协议;\" + \"
\" + \"6.您可以阅读完整版的隐私保护政策了解我们申请使用相关权限的情况,以及对您个人隐私的保护措施。\"; } private void showPrivacyDialog() { // 创建一个WebView用于显示隐私政策的HTML内容 WebView webView = new WebView(this); webView.loadData(buildPrivacyHtml(), \"text/html\", \"utf-8\"); // 创建一个不可取消的对话框 AlertDialog.Builder privacyDialog = new AlertDialog.Builder(this); privacyDialog.setCancelable(false); privacyDialog.setView(webView); // 设置WebView为对话框的内容视图 privacyDialog.setTitle(\"提示\"); // 设置对话框标题 // 设置“拒绝”按钮,并指定点击事件监听器 privacyDialog.setNegativeButton(\"拒绝\", this); // 设置“同意”按钮,并指定点击事件监听器 privacyDialog.setPositiveButton(\"同意\", this); // 创建并显示对话框 privacyDialog.create().show(); } @Override public void onClick(DialogInterface dialogInterface, int i) { // 处理对话框按钮点击事件 switch (i) { case AlertDialog.BUTTON_POSITIVE: // 如果点击了“同意”按钮 setPrivacyAccept(true); // 保存用户同意隐私政策的状态 enterUnityActivity(); // 进入Unity主Activity break; case AlertDialog.BUTTON_NEGATIVE: // 如果点击了“拒绝”按钮 finish(); // 结束当前Activity,退出应用 break; } } private void enterUnityActivity() { // 创建一个Intent,用于启动Unity主Activity Intent unityAct = new Intent(); unityAct.setClassName(this, \"com.unity3d.player.UnityPlayerActivity\"); startActivity(unityAct); } private void setPrivacyAccept(boolean accepted) { // 使用SharedPreferences保存用户是否同意隐私政策的状态 SharedPreferences.Editor prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE).edit(); prefs.putBoolean(PRIVACY_ACCEPTED_KEY, accepted); prefs.apply(); // 提交更改 } private boolean getPrivacyAccept() { // 从SharedPreferences中获取用户是否同意隐私政策的状态,默认为false SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); return prefs.getBoolean(PRIVACY_ACCEPTED_KEY, false); }}
代码关键处都注释了,不懂,拿代码直接问AI就好
- 第五步,替换AndroidManifest.xml里的内容,具体如图,代码在图下面(!注意,这里的内容和第一个,第二个方法里的不同)
AndroidManifest.xml
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" xmlns:tools=\"http://schemas.android.com/tools\"> <uses-permission android:name=\"android.permission.INTERNET\" /> <uses-feature android:glEsVersion=\"0x00030000\" /> <uses-feature android:name=\"android.hardware.vulkan.version\" android:required=\"false\" /> <uses-feature android:name=\"android.hardware.touchscreen\" android:required=\"false\" /> <uses-feature android:name=\"android.hardware.touchscreen.multitouch\" android:required=\"false\" /> <uses-feature android:name=\"android.hardware.touchscreen.multitouch.distinct\" android:required=\"false\" /> <application android:extractNativeLibs=\"true\"> <activity android:name=\"com.companyName.projectName.PrivacyActivity\" android:exported=\"true\"> <intent-filter> <category android:name=\"android.intent.category.LAUNCHER\" /> <action android:name=\"android.intent.action.MAIN\" /> </intent-filter> </activity> <meta-data android:name=\"unity.splash-mode\" android:value=\"0\" /> <meta-data android:name=\"unity.splash-enable\" android:value=\"True\" /> <meta-data android:name=\"unity.launch-fullscreen\" android:value=\"True\" /> <meta-data android:name=\"unity.render-outside-safearea\" android:value=\"True\" /> <meta-data android:name=\"notch.config\" android:value=\"portrait|landscape\" /> <meta-data android:name=\"unity.auto-report-fully-drawn\" android:value=\"true\" /> <activity android:name=\"com.unity3d.player.UnityPlayerActivity\" android:configChanges=\"mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density\" android:exported=\"true\" android:hardwareAccelerated=\"false\" android:launchMode=\"singleTask\" android:resizeableActivity=\"false\" android:screenOrientation=\"fullUser\" android:theme=\"@style/UnityThemeSelector\"> <meta-data android:name=\"unityplayer.UnityActivity\" android:value=\"true\" /> <meta-data android:name=\"notch_support\" android:value=\"true\" /> </activity> </application></manifest>
- 第六步,打包测试,我这里用的是雷电模拟器测试,步骤如下
先打开雷电模拟器
等待一会,就可以在模拟器里看到了
这样子就OK啦
如果想打包出正式版本,打包出apk的话,大致步骤如下图
填写好之后,无脑下一步
成功后,去下图项目这个文件夹就可以找到apk