Ask permission after demonstrating value, not on first launch. Every notification should connect to a user goal and a useful destination.
Let users control categories and frequency. Respect timezone, recent activity, and quiet periods. Measure downstream completion rather than open rate alone. A notification that wins a tap while training the user to disable all alerts is a product loss.