Multi-Channel Setup
Configure push notifications, email, and in-app messaging for comprehensive player communication.
12 min read
Overview
Ilara supports multiple messaging channels, each with unique strengths. Use them together for maximum reach and engagement.
| Channel | Best For | Typical Open Rate |
|---|---|---|
| Push | Urgent, time-sensitive | 15-30% |
| Rich content, newsletters | 20-40% | |
| In-App | Active players, tutorials | 60-80% |
| SMS | Critical alerts (optional) | 90%+ |
Push Notifications
Setup
Configure push providers in Settings → Integrations → Push:
- Firebase Cloud Messaging (FCM): Android and iOS
- Apple Push Notification Service (APNs): iOS native
- Web Push: Browser notifications
Push Configuration
json
POST /v1/integrations/push/fcm{class="code-string">"provider": class="code-string">"fcm",class="code-string">"credentials": {class="code-string">"project_id": class="code-string">"your-firebase-project",class="code-string">"private_key": class="code-string">"...",class="code-string">"client_email": class="code-string">"..."},class="code-string">"default_channel": class="code-string">"game_notifications",class="code-string">"default_sound": class="code-string">"notification.wav",class="code-string">"default_icon": class="code-string">"ic_notification"}
Sending Push
Push Notification Campaign
json
{class="code-string">"channel": class="code-string">"push",class="code-string">"template": {class="code-string">"title": class="code-string">"{{player.name}}, your energy is full!",class="code-string">"body": class="code-string">"Time to continue your adventure.",class="code-string">"image_url": class="code-string">"https:class="code-commentclass="code-string">">//cdn.example.com/energy-full.png",class="code-string">"action_url": class="code-string">"/game/play",class="code-string">"data": {class="code-string">"event_type": class="code-string">"energy_full",class="code-string">"deep_link": class="code-string">"game:class="code-commentclass="code-string">">//play"}},class="code-string">"android": {class="code-string">"channel_id": class="code-string">"game_notifications",class="code-string">"priority": class="code-string">"high"},class="code-string">"ios": {class="code-string">"sound": class="code-string">"default",class="code-string">"badge": 1}}
Setup
Configure email providers in Settings → Integrations → Email:
- SendGrid: Transactional and marketing
- Mailgun: Developer-focused
- Amazon SES: High volume, cost-effective
- Postmark: Transactional focused
Email Configuration
json
POST /v1/integrations/email/sendgrid{class="code-string">"provider": class="code-string">"sendgrid",class="code-string">"api_key": class="code-string">"SG.xxxx",class="code-string">"from_email": class="code-string">"[email protected]",class="code-string">"from_name": class="code-string">"Your Game",class="code-string">"reply_to": class="code-string">"[email protected]"}
Email Templates
Email Campaign
json
{class="code-string">"channel": class="code-string">"email",class="code-string">"template": {class="code-string">"subject": class="code-string">"Your weekly adventure recap, {{player.name}}!",class="code-string">"html_template_id": class="code-string">"weekly-recap-v2",class="code-string">"template_data": {class="code-string">"player_name": class="code-string">"{{player.name}}",class="code-string">"games_played": class="code-string">"{{stats.games_this_week}}",class="code-string">"achievements": class="code-string">"{{stats.achievements_earned}}",class="code-string">"leaderboard_rank": class="code-string">"{{stats.rank}}"},class="code-string">"preheader": class="code-string">"You played 12 games this week!"}}
In-App Messages
In-app messages appear inside your game to active players. Highest engagement but only reaches players who open the game.
Message Types
| Type | Description | Use Case |
|---|---|---|
modal | Full-screen overlay | Important announcements, offers |
banner | Top/bottom banner | Soft promotions, tips |
slideup | Slide from bottom | Quick notifications |
carousel | Swipeable cards | Feature showcases |
In-App Campaign
json
{class="code-string">"channel": class="code-string">"in_app",class="code-string">"template": {class="code-string">"type": class="code-string">"modal",class="code-string">"title": class="code-string">"Special Weekend Offer!",class="code-string">"body": class="code-string">"Get 2x gems on all purchases this weekend.",class="code-string">"image_url": class="code-string">"https:class="code-commentclass="code-string">">//cdn.example.com/weekend-offer.png",class="code-string">"buttons": [{class="code-string">"text": class="code-string">"Shop Now",class="code-string">"action": class="code-string">"deep_link",class="code-string">"url": class="code-string">"game:class="code-commentclass="code-string">">//shop"},{class="code-string">"text": class="code-string">"Maybe Later",class="code-string">"action": class="code-string">"dismiss"}],class="code-string">"dismissible": true,class="code-string">"display_duration": 0},class="code-string">"trigger": {class="code-string">"type": class="code-string">"session_start",class="code-string">"delay_seconds": 5}}
Channel Priority & Fallback
Configure channel priority to optimize delivery:
Multi-Channel Campaign
json
{class="code-string">"name": class="code-string">"Re-engagement Campaign",class="code-string">"segment_id": class="code-string">"lapsed-7-days",class="code-string">"channel_strategy": {class="code-string">"mode": class="code-string">"cascade",class="code-string">"channels": [{class="code-string">"channel": class="code-string">"push",class="code-string">"wait_hours": 0,class="code-string">"skip_if_opened": true},{class="code-string">"channel": class="code-string">"email",class="code-string">"wait_hours": 24,class="code-string">"skip_if_opened": true},{class="code-string">"channel": class="code-string">"in_app",class="code-string">"wait_hours": 72,class="code-string">"skip_if_opened": false}]}}class=class="code-string">"code-comment">// Cascade: Try push first, if not opened in 24h send email,class=class="code-string">"code-comment">// if still not opened show in-app when they return
Strategy Modes
| Mode | Description |
|---|---|
single | Send to one channel only |
broadcast | Send to all channels simultaneously |
cascade | Try channels in order with fallback |
smart | AI picks best channel per player |
Frequency Capping
Prevent notification fatigue with frequency limits:
Frequency Caps
json
{class="code-string">"frequency_caps": {class="code-string">"global": {class="code-string">"max_per_day": 3,class="code-string">"max_per_week": 10},class="code-string">"per_channel": {class="code-string">"push": { class="code-string">"max_per_day": 2 },class="code-string">"email": { class="code-string">"max_per_week": 3 },class="code-string">"in_app": { class="code-string">"max_per_session": 1 }},class="code-string">"quiet_hours": {class="code-string">"enabled": true,class="code-string">"start": class="code-string">"22:00",class="code-string">"end": class="code-string">"08:00",class="code-string">"timezone": class="code-string">"player_local"}}}
SDK Integration
Unity - Register Push Token
csharp
class=class="code-string">"code-comment">// Register device for push notificationsIlaraClient.Instance.RegisterPushToken(token: FirebaseMessaging.GetToken(),platform: class="code-string">"fcm" class=class="code-string">"code-comment">// or class="code-string">"apns");class=class="code-string">"code-comment">// Handle in-app message displayIlaraClient.Instance.OnInAppMessage += (message) =>{ShowInAppMessage(message);};class=class="code-string">"code-comment">// Check for pending in-app messagesawait IlaraClient.Instance.CheckInAppMessages();
Best Practices
- Don't over-message: Respect frequency caps strictly
- Match channel to message: Urgent = push, Rich = email, In-game = in-app
- Personalize: Use player data for relevance
- Test deliverability: Monitor bounce rates and opt-outs
- Respect preferences: Honor opt-out requests immediately
Next Steps
- AI Message Generation — Personalize content
- Send Time Optimization — Optimal delivery timing
- Churn Prediction — Target at-risk players