google上架合规2.0

1.APP又一次因为通讯录问题被下架了

已经做到了这四点了
1.通讯录的应用场景必须合适,使用时弹窗提示用户我们拿通讯录的用途
2.上传之前必须能够提示用户要上传通讯录了,让用户能够做出选择
3.上传不能太频繁
4.隐私政策声明
根据审核小组的发来的邮件,这次的理由是我们使用通讯录的理由不够充分,修改了弹窗和隐私申明相关文案再次提审就没问题了。

2.关于Google强制把compileSdkVersion升级到30带来的问题。

由于google在android 10进行了分区的操作,之前有权限直接操作非私有目录下的文件已经不行了,当时使用的是临时替代方案使用android:requestLegacyExternalStorage="true"。但是在compileSdkVersion升级到30的时候这个标签会自动忽略。还好我们自己应用使用到操作的文件并不多,主要是一个第三方的sdk,包含拍照和选图以及压缩功能,由于作者已经很久没有更新了,只能自己下完包一个个去改了。主要的问题:
1.应用创建文件使用外部存储空间
2.应用操作外部文件。
解决办法:
第一个问题主要是在一些缓存文件的地方放在了外部存储目录,后面就统一使用getExternalCacheDir创建目录了
第二个问题主要是会在图片的压缩还是直接用的绝对路径,这个时候需要拿到文件的Uri,然后将文件复制到我们自己的目录下进行操作。附上我自己的代码

public static File from(Context context, Uri uri) throws IOException {
        InputStream inputStream = context.getContentResolver().openInputStream(uri);
        String fileName = getFileName(context, uri);
        String[] splitName = splitFileName(fileName);
        File tempFile = File.createTempFile(splitName[0], splitName[1]);
        tempFile = rename(tempFile, fileName);
        tempFile.deleteOnExit();
        FileOutputStream out = null;
        try {
            out = new FileOutputStream(tempFile);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        if (inputStream != null) {
            copy(inputStream, out);
            inputStream.close();
        }

        if (out != null) {
            out.close();
        }
        return tempFile;
    }

    private static String[] splitFileName(String fileName) {
        String name = fileName;
        String extension = "";
        int i = fileName.lastIndexOf(".");
        if (i != -1) {
            name = fileName.substring(0, i);
            extension = fileName.substring(i);
        }

        return new String[]{name, extension};
    }

    private static String getFileName(Context context, Uri uri) {
        String result = null;
        if (uri.getScheme().equals("content")) {
            Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
            try {
                if (cursor != null && cursor.moveToFirst()) {
                    result = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }
        }
        if (result == null) {
            result = uri.getPath();
            int cut = result.lastIndexOf(File.separator);
            if (cut != -1) {
                result = result.substring(cut + 1);
            }
        }
        return result;
    }

    private static File rename(File file, String newName) {
        File newFile = new File(file.getParent(), newName);
        if (!newFile.equals(file)) {
            if (newFile.exists() && newFile.delete()) {
                Log.d("FileUtil", "Delete old " + newName + " file");
            }
            if (file.renameTo(newFile)) {
                Log.d("FileUtil", "Rename file to " + newName);
            }
        }
        return newFile;
    }

    private static long copy(InputStream input, OutputStream output) throws IOException {
        long count = 0;
        int n;
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        while (EOF != (n = input.read(buffer))) {
            output.write(buffer, 0, n);
            count += n;
        }
        return count;
    }

3.APP获取应用Android列表的问题。

在需要加上android 11android:name="android.permission.QUERY_ALL_PACKAGES"android:name="android.permission.QUERY_ALL_PACKAGES"申明否者无法直接获取应用的安装列表了。并且google明确提出明年这个也会被限制。
解决办法:
1.在google管理后台去提交申请
2.拿到你想查询的应用的包名放到你的androidManifest文件里,在Android11没有权限的情况是可以查到的

4.Unencrypted traffic allowed on all domains

Configure your application's network security to allow unencrypted traffic across all domains. Eavesdroppers can take advantage of this to intercept the data your application sends.If such data is sensitive or could be used to identify a user,this could compromisse user privacy. It is best to allow only encrypted traffic by setting the cleartextTrafficPermitted flag to false,or by adding an encryption policy for specific domains.

由于本身是一个老的项目,本身还有访问一些http外链,所以基本都是明文请求,google play上架为了数据的安全性要求统一使用cleartextTrafficPermitted为false.但是这导致了http链接无法访问,但是你可以在networkSecurityConfig配置文件中配置你信任的CA 如

<?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
            <domain includeSubdomains="true">example.com</domain>
            <trust-anchors>
                <certificates src="@raw/my_ca"/>
            </trust-anchors>
        </domain-config>
    </network-security-config>
    

具体一些其他的配置可以参考Android网络安全配置

5.Encryption is not secure

Your application uses insecure encryption.

google play给了一个链接针对不安全加密问题的解决方法
看了下项目中设计到加密的地方就一个 接口的全局加密,用的是aes的对称加密,对比google play的文档应该指出的是加密的密钥太容易获取了,可以使用 AndroidKeystore 存储密钥。由于用官方的方法要额外引用三个包,我就没采用官方的方法,直接写了一个jni编译成so用来获取加密的key,再次提审也没有这个问题了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容