Ok, finalmente sono riuscito a farlo funzionare! Grazie a tutti coloro che hanno cercato di aiutarmi, in particolare @Rick James e @Gerard Roche.
SUGGERIMENTO:
Se devi lavorare con le emoji prima di tutto fai dei semplici test su localhost. Crea un nuovo database e crea una nuova app a scopo di test.
Se segui i passaggi che ho scritto nella domanda o se segui questo tutorial: https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 deve funzionare.
Lavorando localmente su una nuova app di base avrai più controllo e più spazio per fare tutti i test di cui hai bisogno.
SOLUZIONE:
Nel mio caso il problema era nella configurazione del database in CodeIgniter. Non stava impostando correttamente il char_set e le regole di confronto per una stupida dimenticanza:stavo sovrascrivendo le impostazioni del database nella funzione che salva i messaggi per essere sicuro che funzionasse con il database mobile.
PRIMA:
function message_save ( $data = FALSE )
{
$project_db_config = array();
$project_db_config['hostname'] = 'MY_HOST';
$project_db_config['username'] = 'MY_USERNAME';
$project_db_config['password'] = 'MY_PASSWORD';
$project_db_config['database'] = 'MY_DATABASE';
$mobile_db = $this->load->database( $project_db_config, TRUE );
// other code to save message
}
DOPO:
function message_save ( $data = FALSE )
{
$mobile_db_connection = $this->load->database('admin_mobile_mh', TRUE);
// other code to save message
}
CONCLUSIONE:
L'app deve impostare correttamente la connessione al database. Se il database è configurato correttamente ma non esegui la connessione corretta con l'app, non funzionerà.
Quindi, se riscontri problemi simili, assicurati che l'API abbia impostato correttamente il char_set
come utf8mb4
e db_collat
come utf8mb4_unicode_ci
.