关于:未同意隐私政策,应用获取ANDROID ID问题2

一、环境

Unity2018 4.21f1、Android Studio、Windows10
二、问题描述

在发布应用到华为应用市场时,提示“在用户同意隐私政策前,您的应用获取了用户的ANDROID ID,不符合华为应用市场审核标准。”

如果你想去掉获取ANDROID ID的代码可以参考:关于:未同意隐私政策,应用获取ANDROID ID问题-CSDN博客

三、方式

如果尝试过各种方式,都无法去除,那就加一个启动页来做 隐私政策 提示。

举例:项目包名com.aaa.bbb

1、修改AndroidManifest.xml文件

<application><activity android:name="com.aaa.bbb.PrivacyActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>
...
</application>

注意:你自己Activity中的下面代码要去掉

       <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

 2、PrivacyActivity.java源码

package com.aaa.bbb;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;public class PrivacyActivity extends Activity implements DialogInterface.OnClickListener {boolean useLocalHtml = true;//true表示隐私协议对话框显示的内容使用本地html文本;false则使用远程网页内容String privacyUrl = "https://blog.csdn.net/nmg10";//远程网页内容final String htmlStr = "欢迎使用本游戏,在使用本游戏前,请您充分阅读并理解<a href=\"https://blog.csdn.net/nmg10\">《隐私政策》</a>的条款,了解我们对于个人信息的处理规则和权限申请的目的,特别提醒您注意前述协议中关于\n" +"我们免除自身责任,限制您的权力的相关条款及争议解决方式,司法管辖等内容。我们将严\n" +"格遵守相关法律法规和隐私政策以保护您的个人隐私。为确保您的游戏体验,我们会向您申请以下必要权限,您可选择同意或者拒绝,拒绝可能会导致无法进入本游戏。同时,我们会根据本游戏中相关功能的具体需要向您申请非必要的权限,您可选择同意或者拒绝,拒绝可能会导致部分游戏体验异常。其中必要权限包括:设备权限(必要):读取唯一设备标识 (AndroidID、mac),生成帐号、保存和恢复游戏数据,识别异常状态以及保障网络及运营安全。存储权限(必要):访问您的存储空间,以便使您可以下载并保存内容、图片存储及上传、个人设置信息缓存读写、系统及日志文件创建。\n";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ActivityInfo actInfo = null;try {//获取AndroidManifest.xml配置的元数据actInfo = this.getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);useLocalHtml = actInfo.metaData.getBoolean("useLocalHtml");privacyUrl = actInfo.metaData.getString("privacyUrl");} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}//如果已经同意过隐私协议则直接进入Unity Activityif (GetPrivacyAccept()){EnterUnityActivity();return;}ShowPrivacyDialog();//弹出隐私协议对话框}@Overridepublic void onClick(DialogInterface dialogInterface, int i) {switch (i){case AlertDialog.BUTTON_POSITIVE://点击同意按钮SetPrivacyAccept(true);EnterUnityActivity();//启动Unity Activitybreak;case AlertDialog.BUTTON_NEGATIVE://点击拒绝按钮,直接退出Appfinish();break;}}private void ShowPrivacyDialog(){WebView webView = new WebView(this);if (useLocalHtml){webView.loadDataWithBaseURL(null, htmlStr, "text/html", "UTF-8", null);}else{webView.loadUrl(privacyUrl);webView.setWebViewClient(new WebViewClient(){@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}@Overridepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {view.reload();}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);}});}AlertDialog.Builder privacyDialog = new AlertDialog.Builder(this);privacyDialog.setCancelable(false);privacyDialog.setView(webView);privacyDialog.setTitle("隐私政策");privacyDialog.setNegativeButton("退出",this);privacyDialog.setPositiveButton("同意",this);privacyDialog.create().show();}
//启动Unity Activityprivate void EnterUnityActivity(){Intent unityAct = new Intent();unityAct.setClassName(this, "com.aaa.bbb.UnityPlayerActivity");this.startActivity(unityAct);}
//保存同意隐私协议状态private void SetPrivacyAccept(boolean accepted){SharedPreferences.Editor prefs = this.getSharedPreferences("PlayerPrefs", MODE_PRIVATE).edit();prefs.putBoolean("MY_PrivacyAccepted", accepted);prefs.apply();}private boolean GetPrivacyAccept(){SharedPreferences prefs = this.getSharedPreferences("PlayerPrefs", MODE_PRIVATE);return prefs.getBoolean("MY_PrivacyAccepted", false);}
}

3、离线网页效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/129994.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HP打印机一点击打印就出现Windows资源管理器已停止工作问题解决

本次处理的打印机型号是HP Officejet 200 移动便携式打印机&#xff0c;不过其他型号如果出现类似现象&#xff0c;解决方法应该是一致的。 在弹出Windows资源管理器已停止工作的报错提示框后&#xff0c;点击左下角的详细信息&#xff0c;看到的内容显示是KernelBase.dll崩溃…

【git merge/rebase】详解合并代码、解决冲突

目录 1.概述 2.merge 3.rebase 4.merge和rabase的区别 5.解决冲突 1.概述 在实际开发中&#xff0c;一个项目往往是多个人一起协作的&#xff0c;头天下班前大家把代码交到远端仓库&#xff0c;第二天工作的第一件事情都是从服务器上拉最新的代码&#xff0c;保证代码版本…

弧形进度条,弧形百分比

要帮助同事写一个弧度的进度条&#xff0c;进度条顶部有一个小圆&#xff0c;具体如下 需要指出的是&#xff0c;我们canvas的绘制是需要弧度&#xff0c;所以我们代码中使用角度&#xff0c;等待绘制的时候再砖话为弧度值 <!DOCTYPE html> <html lang"en"…

【单片机】18-红外线遥控

一、红外遥控背景知识 1.人机界面 &#xff08;1&#xff09;当面操作&#xff1a;按键&#xff0c;旋转/触摸按键&#xff0c;触摸屏 &#xff08;2&#xff09;遥控操作&#xff1a;红外遥控&#xff0c;433M/2.4G无线通信【穿墙能力强】&#xff0c;蓝牙-WIFI-Zigbee-LoRa等…

Maven 项目文档

本章节我们主要学习如何创建 Maven 项目文档。 比如我们在 C:/MVN 目录下&#xff0c;创建了 consumerBanking 项目&#xff0c;Maven 使用下面的命令来快速创建 java 项目&#xff1a; mvn archetype:generate -DgroupIdcom.companyname.bank -DartifactIdconsumerBanking -…

持续集成交付CICD:Jenkins部署

目录 一、理论 1.CI/CD 2.Gitlab内置持续集成 3.Jenkins安装与部署 4.Gitlab服务部署 5.Jenkins服务部署 6.Tomcat服务部署 7.Jenkins–Pipeline流水线项目构建 二、实验 1.Gitlab服务部署 2.Jenkins服务部署 3.Tomcat服务部署 4.Jenkins–Pipeline流水线项目构建…

【centos7安装ElasticSearch】

概述 最近工作中有用到ES &#xff0c;当然少不了自己装一个服务器捣鼓。本文的ElasticSearch 的版本&#xff1a; 7.17.3 一、下载 ElasticSearch 点此下载 下载完成后上传至 Linux 服务器&#xff0c;本文演示放在&#xff1a; /root/ 下&#xff0c;进行解压&#xff1…

虚拟桌宠模拟器:VPet-Simulator,一个开源的桌宠软件, 可以内置到任何WPF应用程序

虚拟桌宠模拟器&#xff1a;VPet-Simulator&#xff0c;一个开源的桌宠软件, 可以内置到任何WPF应用程序 虚拟桌宠模拟器 一个开源的桌宠软件, 可以内置到任何WPF应用程序 获取虚拟桌宠模拟器 OnSteam(免费) 或 通过[Nuget]内置到你的WPF应用程序 1.虚拟桌宠模拟器 详细介绍 …

这短短 6 行代码你能数出几个bug?

前言&#xff1a;本文仅仅只是分享笔者一年前见到的诡异代码&#xff0c;大家可以看看乐子&#xff0c;随便数一数一共有多少个bug&#xff0c;这数bug多少还是要点水平的 在初学编程的时候&#xff0c;写的第一个代码大多都是 hello world&#xff0c;可是就算是 hello world…

GNU和Linux的关系、 Linux的发行版本、CentOs和RedHat的区别

GNU和Linux的关系 其实&#xff0c;我们通常称之为的"Linux"系统&#xff0c;相对更准确的名称应该称为“GNU/Linux”系统&#xff01; 一个功能完全的操作系统需要许多不同的组成部分&#xff0c;其中就包括内核及其他组件&#xff1b;而在GNU/Linux系统中的内核就…

Flutter学习笔记

此篇文章用来记录学习Flutter 和 Dart 相关知识 零.Dart基本数据类型 Dart 是一种静态类型的编程语言&#xff0c;它提供了一系列基本数据类型&#xff0c;用于存储和操作不同种类的数据。以下是 Dart 中的一些基本数据类型以及它们的详细介绍&#xff1a; 1. 整数类型&#…

SpringCloud源码探析(十)-Web消息推送

1.概述 消息推送在日常使用中的场景比较多&#xff0c;比如有人点赞了我的博客或者关注了我&#xff0c;这时我就会收到一条推送消息&#xff0c;以此来吸引我点击或者打开应用。消息推送的方式主要分为两种&#xff1a;web消息推送和移动端消息推送。它将所要发送的信息&…