As a rule, the best experience is to present device-specific UI. The forms are provided as a kind of quick and dirty generic solution, but there's no reason to be limited by them. In my own deployment, I verify authenticated users by prompting them for a specific device ("Please verify with your <b>{{
device.name}}</b>.") and including a link to display a list of all of their configured devices so they can choose something else. The UI for an SMS device is slightly different than the others, since it requires requesting a code. In principle, you should be able to present any UI you want for any kind of custom device.