首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Permissions.askAsync未按预期工作

Permissions.askAsync未按预期工作
EN

Stack Overflow用户
提问于 2020-01-30 06:11:10
回答 1查看 6.1K关注 0票数 7

我对Permissions.askAsync的通知有问题。

代码语言:javascript
复制
const status = await Permissions.askAsync(Permissions.NOTIFICATIONS)

当使用Permissions.askAsync的通知状态“未确定”时,我希望看到提示对话框,告诉用户打开通知以便继续。但是,当我用Permissions.getAsync获得通知的状态时,如果它不是“授予”的,我使用Permissions.askAsync,但是什么都没有发生(没有显示通知对话框)

环境下:

代码语言:javascript
复制
Target: iOS
Expo CLI 3.8.0 environment info:
System:
OS: macOS 10.14.6
Shell: 5.3 - /bin/zsh
Binaries:
Node: 12.13.1 - /usr/local/bin/node
npm: 6.12.1 - /usr/local/bin/npm
Watchman: 4.7.0 - /usr/local/bin/watchman
IDEs:
Android Studio: 3.4 AI-183.6156.11.34.5692245
Xcode: 11.2.1/11B500 - /usr/bin/xcodebuild
npmPackages:
expo: ^35.0.0 => 35.0.1
react: 16.11.0 => 16.11.0
react-native: https://github.com/expo/react-native/archive/sdk-35.0.0.tar.gz => 0.59.8
react-navigation: ^3.11.0 => 3.12.1
npmGlobalPackages:
expo-cli: 3.8.0

示例如下:

代码语言:javascript
复制
import * as Permissions from "expo-permissions"

componentDidMount(){
   this.checkPushNotificationState()
}

checkPushNotificationState = async () => {

  const { status: existingStatus } = await Permissions.getAsync(
    Permissions.NOTIFICATIONS
  )

  if (existingStatus !== "granted") {
    const status = await Permissions.askAsync(Permissions.NOTIFICATIONS)
    statusNotifications = status.status
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-05-21 23:26:42

使用app- user链接打开手动权限设置,因为如果用户拒绝权限,ios不允许我们从提示中授予权限。

代码语言:javascript
复制
Linking.openURL('app-settings:')

像这样

代码语言:javascript
复制
import React, { Component } from "react";
import { Text, StyleSheet, View, Linking, Alert } from "react-native";
import * as Permissions from "expo-permissions";

export default class App extends Component {
  componentDidMount() {
    this.checkPushNotificationState();
  }

  checkPushNotificationState = async () => {
    let { status: existingStatus } = await Permissions.getAsync(
      Permissions.NOTIFICATIONS
    );

    if (existingStatus !== "granted") {
      const status = await Permissions.askAsync(Permissions.NOTIFICATIONS);
      existingStatus = status.status;
    }
    if (existingStatus !== "granted") {
      Alert.alert(
        "No Notification Permission",
        "please goto setting and on notification permission manual",
        [
          { text: "cancel", onPress: () => console.log("cancel") },
          { text: "Allow", onPress: () => Linking.openURL("app-settings:") },
        ],
        { cancelable: false }
      );
      return;
    }
  };

注意:您应该对向用户询问移动权限的正确方法使用双重权限

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59980039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档