Publishers & Channels

This guide covers creating and managing Publishers and Channels in OpenDev for organizing your distribution strategy.

Overview

Publishers

Publishers represent the entities that publish your applications:

  • Company or individual
  • App store accounts
  • Distribution partners

Channels

Channels represent distribution paths:

  • App stores (Google Play, App Store)
  • Web distribution
  • Direct downloads
  • Regional variations

Publishers

Understanding Publishers

A Publisher contains:

  • Publisher name and identifier
  • Contact information
  • Associated OAuth configurations
  • Platform credentials

Creating a Publisher

  1. Go to Publishers in the sidebar
  2. Click Create Publisher
  3. Fill in the details:
Field Required Description
Publisher ID Yes Unique identifier
Name Yes Display name
Description No Internal notes
Contact Email No Publisher contact
Website No Publisher website
  1. Click Create

Publisher Configuration

{
  "publisherId": "acme_corp",
  "name": "ACME Corporation",
  "description": "Main publishing entity",
  "contact": {
    "email": "publishing@acme.com",
    "website": "https://acme.com"
  },
  "platforms": {
    "googlePlay": {
      "developerAccount": "ACME Corp",
      "serviceAccountEmail": "acme@project.iam.gserviceaccount.com"
    },
    "appStore": {
      "teamId": "XXXXXXXXXX",
      "providerId": "12345678"
    }
  }
}

Managing Publishers

Edit Publisher

  1. Click on a publisher in the list
  2. Click Edit
  3. Modify fields as needed
  4. Click Save

Delete Publisher

  1. Click on the publisher
  2. Click Delete
  3. Confirm deletion

Warning: Cannot delete publishers linked to active channels.

Channels

Understanding Channels

A Channel defines:

  • Distribution platform
  • Regional configuration
  • OAuth provider mappings
  • Payment settings

Channel Types

Type Description Examples
Mobile Store Official app stores Google Play, App Store
Web Web distribution Your website, PWA
Desktop Desktop distribution Steam, direct download
Alternative Third-party stores Samsung, Amazon
Regional Market-specific China, Japan versions

Creating a Channel

  1. Go to Channels in the sidebar
  2. Click Create Channel
  3. Fill in the details:
Field Required Description
Channel Key Yes Unique identifier
Name Yes Display name
Publisher Yes Associated publisher
Platform Yes Target platform
Description No Channel purpose
  1. Click Create

Channel Configuration

{
  "channelKey": "google_play_global",
  "name": "Google Play Global",
  "publisherId": "acme_corp",
  "platform": "android",
  "region": "global",
  "oauth": {
    "providers": ["google", "facebook"],
    "appId": "com.acme.myapp"
  },
  "payment": {
    "enabled": true,
    "providers": ["google_play"]
  }
}

OAuth Channels

Understanding OAuth Channels

OAuth Channels link authentication providers to distribution channels:

  • Which login methods are available
  • Provider credentials per channel
  • Channel-specific configurations

Creating OAuth Channel

  1. Go to OAuth Channels in the sidebar
  2. Click Create OAuth Channel
  3. Configure the provider:
Field Required Description
Provider Yes OAuth provider (Google, Facebook, etc.)
Client ID Yes Provider app ID
Client Secret Yes Provider secret
Scopes Yes Requested permissions
Callback URL Yes OAuth callback

OAuth Channel Examples

Google OAuth Channel

{
  "provider": "google",
  "clientId": "xxxxx.apps.googleusercontent.com",
  "clientSecret": "GOCSPX-xxxxx",
  "scopes": ["email", "profile"],
  "callbackUrl": "https://yourdomain.com/auth/callback"
}

Apple Sign In Channel

{
  "provider": "apple",
  "clientId": "com.yourapp.web",
  "teamId": "XXXXXXXXXX",
  "keyId": "XXXXXXXXXX",
  "privateKey": "-----BEGIN PRIVATE KEY-----\n...",
  "scopes": ["email", "name"]
}

Binding Channels to Apps

In Application Settings

  1. Go to your application details
  2. Click Channels tab
  3. Click Bind Channel
  4. Select channels to associate
  5. Click Save

Channel Binding Options

Option Description
All Channels App available on all channels
Specific Channels App limited to selected channels
Exclude Channels App blocked from certain channels

Configuration Workflow

Typical Setup

1. Create Publishers
   └── ACME Corp (main publisher)
   └── ACME Games (games division)

2. Create Channels
   └── google_play_global
   └── app_store_global
   └── web_direct
   └── china_domestic

3. Create OAuth Channels
   └── Google OAuth for all
   └── Apple Sign In for iOS
   └── WeChat for China

4. Bind to Applications
   └── MyApp → google_play, app_store, web
   └── MyGame → google_play, app_store
   └── MyApp China → china_domestic

Best Practices

Publisher Organization

By Business Unit:
├── acme_main (main company)
├── acme_games (games studio)
└── acme_enterprise (B2B products)

By Region:
├── acme_global (worldwide)
├── acme_china (China entity)
└── acme_japan (Japan entity)

Channel Naming

Platform + Region:
├── google_play_global
├── google_play_china
├── app_store_global
├── app_store_china
├── web_global
└── web_china

OAuth Strategy

  1. Unified providers - Use same OAuth apps across channels when possible
  2. Regional providers - Add region-specific (WeChat, QQ) where needed
  3. Fallback options - Always provide email/password option
  4. Consistent experience - Same user ID across channels

Integration

Client Configuration

Your app receives channel info in config:

{
  "channel": {
    "key": "google_play_global",
    "name": "Google Play Global",
    "platform": "android"
  },
  "oauth": {
    "providers": [
      {
        "id": "google",
        "clientId": "xxxxx.apps.googleusercontent.com"
      },
      {
        "id": "facebook",
        "appId": "1234567890"
      }
    ]
  }
}

Detecting Channel

// Android
const channelKey = BuildConfig.CHANNEL_KEY;

// iOS
const channelKey = Bundle.main.infoDictionary["ChannelKey"];

// Web
const channelKey = process.env.REACT_APP_CHANNEL_KEY;

Troubleshooting

OAuth Not Working

Possible causes:

  • Incorrect client ID/secret
  • Wrong callback URL
  • Missing scopes

Solutions:

  1. Verify credentials in provider console
  2. Check callback URL matches exactly
  3. Review scope permissions

Channel Not Found

Possible causes:

  • Typo in channel key
  • Channel not created
  • Case sensitivity issues

Solutions:

  1. Verify channel exists in dashboard
  2. Check key is exact match (case-sensitive)
  3. Review app channel bindings

Publisher Access Issues

Possible causes:

  • Permissions not granted
  • Publisher not linked to account
  • Role restrictions

Solutions:

  1. Check user role in team settings
  2. Verify publisher ownership
  3. Contact account administrator