The app doesn't know. It just produces a widget tree, and the OS-provided renderer renders it this way or that way. In particular, it chooses not to render controls marked as "security-sensitive" when the rendering is intended for a screenshot; it could instead put empty boxes in their place, etc. The app has no idea and no control, AFAIK.
Open the amazon app. Take a screenshot. See a toast message informing you that the amazon app has detected you've taken a screenshot. Fucking used for fucking profiling.
Don't apps like Snapchat notify the other person if you take a screenshot of your messages?
The apps definitely know. Horsemen example: If you screenshot on Amazon (and Business version) iOS apps, it “helpfully” pops its own share sheet.
Even having never developed on iOS before, I was able to find this in the first google search result for "ios api to detect screenshot": https://developer.apple.com/documentation/uikit/uiapplicatio...