Purchases could fail if they require approval, and complete after leaving the premium view, or on next app launch. So I’ve split the premium business logic into a separate manager that maintains a permanent transaction observer.