Requesting notification permission before showing the user any app content is one of the top patterns Apple's guideline 5.1.1 calls out — and one of the highest rates of user denial. Users who see a permission request before understanding the app's value default to "Don't Allow," permanently locking the app out of push on that device. An app that blocks core functionality when notification permission is denied compounds the problem. The correct model — a pre-permission screen explaining specific notification value, followed by a contextual request when the user first enables a notification-powered feature — produces higher grant rates and cleaner review outcomes.
Info because Apple doesn't automatically reject premature notification requests, but the pattern degrades grant rates and can attract guideline scrutiny if combined with other permission issues.
Move the notification permission request behind a pre-permission screen and a feature opt-in, not the app launch sequence.
// src/screens/NotificationOptInScreen.tsx
export function NotificationOptInScreen() {
async function handleEnable() {
const { status } = await Notifications.requestPermissionsAsync();
if (status === 'granted') {
await registerPushToken();
}
navigation.navigate('Home');
}
return (
<View>
<Text style={styles.headline}>Stay in the loop</Text>
<Text>Get notified when your orders ship, friends reply, or items go on sale.</Text>
<Button title="Enable Notifications" onPress={handleEnable} />
<Button title="Maybe Later" onPress={() => navigation.navigate('Home')} />
</View>
);
}
The app must work fully when notification permission is denied — never block navigation to a screen because the user declined notifications.
app-store-review-blockers.policy-compliance.push-notifications-opt-ininforequestPermissionsAsync() from expo-notifications, requestAuthorization() from UNUserNotificationCenter, getToken() from Firebase Messaging (which implicitly requests permission on some platforms). Determine: (1) Is the permission requested on first launch without context? (2) Is there a pre-permission screen explaining why notifications are useful? (3) If user denies, does the app crash or degrade badly? Also check notification content: are notifications contextual and useful, or are they promotional messages sent at high frequency?expo-notifications, no Firebase Messaging, no push library detected and no push-related code in source)."expo-notifications requestPermissionsAsync() called in App.tsx root useEffect — fires on first launch before user interaction" or "App blocks access to main content when notification permission is denied""Enable notifications to get alerts when your orders ship,
your friends post, or your items go on sale."