EXPO sdk39 中的应用通知设置访问

Posted

技术标签:

【中文标题】EXPO sdk39 中的应用通知设置访问【英文标题】:App notification setting access in EXPO sdk39 【发布时间】:2020-11-03 06:58:27 【问题描述】:

当我意识到 Permissions.askAsync 没有按预期工作时,问题就开始了。

我找到了Permissions.askAsync not working as expected,这对于 ios 来说是很酷的解决方案,但我需要它来用于 android!所以,我为此添加了一些额外的代码:

Alert.alert(
        'No Notification Permission',
        'please go to settings and enable notifications permissions manually',
        [
           text: 'cancel', onPress: () => console.log('cancel') ,
          
            text: 'Allow',
            onPress: async () => 
              if (Platform.OS === 'android') 
                await IntentLauncher.startActivityAsync(
                  IntentLauncher.ACTION_APP_NOTIFICATION_SETTINGS,
                  
                    data: `package:$Application.applicationId`,
                  
                );
              
              if (Platform.OS === 'ios') 
                Linking.openURL('app-settings:');
              
            ,
          ,
        ],
         cancelable: false ,
      );

UPD。下面的构造效果很好,但我想直接访问 APP_NOTIFICATION_SETTINGS。

onPress=() => 
            IntentLauncher.startActivityAsync(
              IntentLauncher.ACTION_APPLICATION_DETAILS_SETTINGS,
              
                data: `package:$Application.applicationId`,
              
            );
          

expo论坛中的相关问题https://forums.expo.io/t/opening-device-settings-on-android-using-linking/2059/14

我尝试访问 APP_NOTIFICATION_SETTINGS,但由于某种原因,我收到类似 “在已安装应用列表中找不到该应用”的错误。它在已发布的项目和独立(apk)上并得到相同的结果。有谁知道是什么问题?

【问题讨论】:

【参考方案1】:

我意识到这有点晚了,但建议的答案对我不起作用。这是在我使用 Android 版本 29 的设备上运行的:

const pkg = Constants.manifest.releaseChannel
    ? Constants.manifest.android.package
    : 'host.exp.exponent';

IntentLauncher.startActivityAsync(
    IntentLauncher.ACTION_APP_NOTIFICATION_SETTINGS,
    
        extra:  'android.provider.extra.APP_PACKAGE': pkg 
    ,
);

TL;DR:这里的键更改是 android.provider.extra.APP_PACKAGE 作为 extra 键名。

【讨论】:

【参考方案2】:

解决方案:

const pkg = Constants.manifest.releaseChannel
        ? Constants.manifest.android.package // When published, considered as using standalone build
        : 'host.exp.exponent'; // In expo client mode

onPress: () => 
              if (Platform.OS === 'android') 
                if (Platform.Version >= 26) 
                  IntentLauncher.startActivityAsync(
                    IntentLauncher.ACTION_APP_NOTIFICATION_SETTINGS,
                    
                      data: `package:$pkg`,
                    ,
                  );
                 else 
                  IntentLauncher.startActivityAsync(
                    IntentLauncher.ACTION_APPLICATION_DETAILS_SETTINGS,
                    
                      data: `package:$pkg`,
                    ,
                  );
                
              
              if (Platform.OS === 'ios') 
                Linking.openURL('app-settings:');
              
            ,

解决方案说明:https://forums.expo.io/t/api-to-open-app-settings/5290/18

【讨论】:

以上是关于EXPO sdk39 中的应用通知设置访问的主要内容,如果未能解决你的问题,请参考以下文章

重置世博会权限

使用 SNS 发送推送通知 - Expo App

通过 FCM 在独立的 expo android build 上推送通知不会触发 addNotificationResponseReceivedListener()

Expo SDK 37 中的不可见验证码

使用 Expo react native (android) 收听 FCM 推送通知传递

Expo大作战(三十一)--expo sdk api之Payments(expo中的支付),翻译这篇文章傻逼了,完全不符合国内用户,我只负责翻译大家可以略过!