Ok, finalmente consegui fazer funcionar! Obrigado a todos que tentaram me ajudar, especialmente @Rick James e @Gerard Roche.
SUGESTÃO:
Se você precisa trabalhar com emoji antes de tudo faça testes simples no localhost. Crie um novo banco de dados e faça um novo aplicativo para fins de teste.
Se você seguir os passos que escrevi na pergunta ou se seguir este tutorial: https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 deve funcionar.
Trabalhando localmente em um novo aplicativo básico, você terá mais controle e mais espaço para fazer todos os testes necessários.
SOLUÇÃO:
No meu caso o problema estava na configuração do banco de dados no CodeIgniter. Não estava configurando corretamente o char_set e o collation para uma visão estúpida:eu estava substituindo as configurações do banco de dados na função que salva mensagens para ter certeza de que estava funcionando com o banco de dados móvel.
ANTES:
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
}
DEPOIS:
function message_save ( $data = FALSE )
{
$mobile_db_connection = $this->load->database('admin_mobile_mh', TRUE);
// other code to save message
}
CONCLUSÃO:
O aplicativo deve definir a conexão com o banco de dados corretamente. Se você tiver o banco de dados configurado corretamente, mas não fizer a conexão adequada com seu aplicativo, ele não funcionará.
Portanto, se você encontrar problemas semelhantes, certifique-se de que a API configure corretamente o
char_set
como utf8mb4
e db_collat
como utf8mb4_unicode_ci
.