【问题标题】:Android M Permissions with Parse Push Notifications带有解析推送通知的 Android M 权限
【发布时间】:2015-11-13 14:09:05
【问题描述】:

我对新的运行时权限模型仍然有些困惑。 Parse 推送通知 (GCM) 的以下任何所需权限是否需要运行时权限?

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="android.permission.VIBRATE" />

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

<uses-permission android:name="android.permission.GET_ACCOUNTS" />

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

 <permission android:protectionLevel="signature"       android:name="com.parse.starter.permission.C2D_MESSAGE" />

<uses-permission android:name="com.parse.starter.permission.C2D_MESSAGE" />

【问题讨论】:

  • 您无需在 6.0+ 上请求 GET_ACCOUNTS 权限即可使解析推送工作。它在 Manifest 中声明,因此它可以支持 Android 4.04 及更低版本。在 6.0+ 上,此权限已声明,但不需要“授予”

标签: java android parse-platform permissions push-notification


【解决方案1】:

在您上面列出的权限中,GET_ACCOUNTS 需要运行时检查,因为它的保护级别很危险。

但问题是,虽然 GCM 不再需要 GET_ACCOUNTS 权限才能工作(我猜是从 7.5 Play Services 开始),但如果您使用 Parse Push Notifications,仍然需要它。

似乎为了让 Parse 能够完全兼容所有 Android 设备(即不支持 GCM 的 Kindle Fires 等基于 GCM 的设备,它们必须回退到自己的持久套接字实现和当然是 4.0.3 及以下的设备),Parse 仍然需要这个权限和其他一些权限。

Parse 的一个人提到:

我们要求它被请求,也就是在 AndroidManifest.xml 中,但是 不需要授予它。

这个问题正在讨论中,您可能想看看这些主题:

https://github.com/ParsePlatform/Parse-SDK-Android/issues/129 https://parse.com/questions/android-use-only-gcm-dont-require-additional-permissions

【讨论】:

    【解决方案2】:

    GET_ACCOUNTS 权限需要在运行时检查该权限,因为它属于危险权限组 (https://developer.android.com/guide/topics/security/permissions.html#normal-dangerous)。

    其他的都是普通权限,只要在manifest文件中声明就会被授予(https://developer.android.com/guide/topics/security/normal-permissions.html

    如果您意识到自己在运行时没有权限,则需要使用方法 requestPermissions(Activity yourActivity, String[] permissions, int requestCode) 来请求它。之后,将向用户显示一个不可自定义的对话框,请求权限。

    最后,您需要在您的 Activity 上覆盖 onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) 方法,检查 requestCode 是否与您在 requestPermissions 上发送的 requestCode 相同,如果已授予目标权限。

    您还需要考虑其他情况,例如当用户第一次未授予权限时,您仍想询问他/她。为了知道如何处理这种情况,我建议您阅读以下内容: http://developer.android.com/intl/pt-br/training/permissions/requesting.html。它还有请求权限和检查结果的示例代码

    【讨论】:

    • 如果权限被拒绝,你建议我怎么办?
    • 我编辑了我之前的答案,对此有更好的解释
    • 我明白这一切,但如何禁用该用户的解析推送通知?
    【解决方案3】:

    根据Android开发者文档,只要你在manifest中定义了这些权限,系统就会自动授予你这些权限,并且不允许用户撤销。因此,您无需在运行时检查这些权限。

    https://developer.android.com/preview/features/runtime-permissions.html

    这在页面底部的“正常权限”部分中说明。

    【讨论】:

    • 您的论点无效。其中一些未在正常权限下列出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2016-06-03
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多