Since the upgrade to v1.8 of EOSIO, it is supposed to be possible for a dApp to pay for the CPU and NET resources of the dApp users. How is this achieved on a technical level?
My understand of the way this works is that the first signature that signs the transaction will be charged for the resources of the transaction, but this is only true once BILL_FIRST_AUTH is activated in the code.
Once this is done, the payer is whoever is the first authoriser of the transaction, which means that the dApp will have to pre-sign the transaction with their own key, and then get the user to sign it in addition before pushing the action to the chain.
In this way, the dApps can determine which accounts, actions, and under which circumstances the dApp pays for the user. For example, they might block a spam account from using this feature entirely, and they might allow any other account with over X EOS in it to call 50 actions on their contract per day (or something like that).