当前位置: 首页 > 面试题库 >

基于应用安装顺序的Android自定义权限失败

顾俊哲
2023-03-14
问题内容

我在Google
Play上的应用出现问题。我有一个免费的应用程序,它利用了自定义权限。此权限允许访问付费应用。这些付费应用程序充当“键”,并在免费应用程序中解锁功能。基本上,免费应用会尝试启动其中一款付费应用的意图。付费应用程序会做一些事情,然后返回免费应用程序是否应该解锁功能。

根据应用安装的顺序出现问题。如果先安装了免费应用程序,然后再安装了付费应用程序,则免费应用程序无法启动意图。返回拒绝权限。如果先安装了付费应用程序,然后安装了免费应用程序,则免费应用程序可以毫无问题地启动意图。重新启动设备和/或强制停止应用无法解决问题。我附上了相关代码。告诉我我做错了什么。

  • 免费App Manifest(相关代码):
        ...
    <uses-permission android:name="com.company.license.PERMISSION" />
    ...
  • 免费的应用代码来检查意图(相关代码):
        Intent KeyApp = new Intent("com.company.license.action.AUTH_1");
    KeyApp.putExtra("com.company.license.challenge", 1);

    //If free app is installed first, an exception is thrown for not having the proper permission. If paid app is installed first, no exception is thrown
    try {
        startActivityForResult(KeyApp, COMMING_FROM_KEYAPP);
    } catch (Exception e) {
        cancelStartUp();
    }
  • 付费应用清单(相关代码):
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.company.installer.1"
    ...
    <permission
        android:name="com.company.license.PERMISSION"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:protectionLevel="normal" >
    </permission>

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoDisplay" >

        <activity
            android:name="com.company.license.auth"
            android:configChanges="keyboardHidden|orientation"
            android:exported="true"
            android:permission="com.company.license.PERMISSION"
            android:theme="@style/Theme.Transparent" >
            <intent-filter>
                <action android:name="com.company.license.action.AUTH_1" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

        <activity
            android:name="com.company.installer.redirect"
            android:configChanges="keyboardHidden|orientation"
            android:exported="true"
            android:theme="@style/Theme.Transparent" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    </manifest>

问题答案:

<permission>在两个应用程序中放置相同的元素。另外,由于这是针对您的两个应用程序的,因此我将使用android:protectionLevel="signature"而不是normal-这意味着用户将永远不需要批准许可,并且没有其他人可以请求许可。并且,此配方将允许以任一顺序进行安装。

更新 :但是请注意,由于Android的“第一个获胜”方法,自定义权限的使用会打开潜在的漏洞。

更新#2 :从Android 5.0开始,现在不再支持此功能,因为两个应用程序不能都具有相同的<permission>元素,除非它们由相同的签名密钥签名。



 类似资料:
  • 从历史上看,Android自定义权限一团糟,并且依赖于安装顺序,这是众所周知的暴露漏洞。 在API 21之前,有一个令人不安的变通方法,即在您的清单中声明另一个应用程序的自定义权限,授予该权限...但是,自API21以来,只有一个应用程序可以声明自定义权限,并且将阻止安装声明相同权限的另一个应用程序。 替代方案是重新安装需要权限的应用程序,这样系统就会检测到它们,但这不是一个好的用户体验。或者在运

  • 本文向大家介绍Android权限控制之自定义权限,包括了Android权限控制之自定义权限的使用技巧和注意事项,需要的朋友参考一下 天哪,这篇文章终于说道如何自定义权限了,左盼右盼,其实这个自定义权限相当easy。为了方便叙述,我这边会用到两个app作为例子示范。 Permission App: used to define a new permission 这个作为定义权限的App,我称之为Pe

  • 是否卸载现有应用程序? 我尝试在另外5个示例程序上这样做,但所有这些程序都给出了这个错误。有人知道怎么解决这个吗?

  • 昨天,我的应用程序在上运行得很完美,但今天,当我开始使用我的应用程序并运行它时,我却不断收到错误消息 安装失败,出现消息“未能建立会话”。 屏幕: 单击“确定”获得错误消息 会话“app”:安装apk时出错 并且设备中不存在(已卸载)应用程序。请建议我怎么做?

  • 我想看看我的应用程序是否可以在即时应用程序中完成。我的应用程序是基于从我的船上获取NFC发送的温度。 不幸的是,android开发者网站的常见问题表示,只有以下几个权限可用。 https://developer.android.com/topic/instant-apps/faqs.html 这意味着NFC权限是不可能的? 提前感谢您的回答

  • 想制作一个应用程序吗?-这很简单! 想让它在不同版本上工作吗?-学习火箭科学。 已经看到了以下答案和更多,但没有任何帮助: 答案1 答案2 答案3 下面是我的AndroidManifest区块: 以及来自的相关块: 当我第一次在Marshmallow(6.0.1)上安装该应用程序时,安装程序说(类似于)-“它不需要特殊访问(或权限)”。该应用程序也未能超越初始屏幕,而在其他Android版本上,航