Rapsssito / react-native-background-actions

React Native background service library for running background tasks forever in Android & iOS.
MIT License
819 stars 117 forks source link

Notification not showing on Android 13 and higher #246

Open andidev opened 1 month ago

andidev commented 1 month ago

A notification will be shown when the task is running, it is not possible to start the service without it. The notification will only be visible in Android.

this is no longer true for Android 13 and higher when using React Native 0.73 or higher (I think or maybe all versions) Think it has to do with the target sdk bump. For some reason the backround task is still running in background for me without a notification which I thought was required. Though maybe it will get killed eventually because of this?

This is how I solved it but maybe this should be in docs? and maybe in implementation?

useEffect(() => {
    const askForPermissionsAndStartBackgroundService = async () => {
        const notificationsAllowed = await askForPostNotificationsPermission();
        if (!notificationsAllowed) return;
        await BackgroundService.start(
            ...config,
        );
    };
    askForPermissionsAndStartBackgroundService();
}, []);
export async function askForPostNotificationsPermission(): Promise<boolean> {
    if (Platform.OS !== 'android') return false;
    if (Platform.Version < 33) return false; // Only request for Android versions 13 and above

    try {
        const granted = await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS, {
            title: 'Notification Permission',
            message: 'We need your permission to show you notifications',
            buttonNeutral: 'Ask Me Later',
            buttonNegative: 'Cancel',
            buttonPositive: 'OK',
        });
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
            console.log('Permission Granted. You can now receive notifications.');
            return true;
        } else if (granted === PermissionsAndroid.RESULTS.DENIED) {
            console.log('Permission Denied. Notification permission is required.');
        } else if (granted === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN) {
            console.log('Permission Blocked. Notification permission has been blocked.');
            Alert.alert('Notification has not been granted!', 'Please long press on app icon, select App Info, select Notifications and enable all notifications.');
        }
    } catch (e) {
        console.warn('requestPostNotificationsPermission error', e);
    }
    return false;
}
muramidaza commented 1 month ago

I tried asking for permission POST_NOTIFICATIONS on Android 13, but application crashes