CTV: QR Code Integration Browser Guard (BG) integration on mobile browser login page triggered by QR Code
1 Force Sign In on Mobile
2 TV Displays QR
3a CTV IP → Region
3b Mobile BG SDK Geo
4 Validation
SIGN IN ON YOUR PHONE
For security, we need you to sign in on your mobile device first.
Waiting for mobile authentication…
SCAN TO PAIR YOUR DEVICE
Open this QR with your phone to verify your location
Awaiting scan…
RESOLVING TV LOCATION
tv.public_ip203.116.42.18
tv.country🇸🇬 SG
tv.regionCentral
tv.ispSingtel
Comparing against mobile geo…
YOU'RE READY TO WATCH
Location verified — Premier League content is licensed in your region.
🇸🇬Singapore — Permitted
Liverpool
VS
Arsenal
Man City
VS
Chelsea
Spurs
VS
Newcastle
📺 CTV · Singapore 203.116.42.18
BG SDK
Embedded in QR-page

Almost there!

Look at your TV — scan the QR code shown to finish pairing.

📺
Tip: keep your camera ready
9:415G
🔒
verify.premierleague.com/bg?t=7f2x9q
Verifying your location
QR pairing token validated. Running geolocation check.
QR pairing token validated
BG SDK loaded in browser
Geolocation check running
Region resolved
Location Verified
You're cleared to watch on the paired TV.
TV IP region🇸🇬 Singapore
Mobile geo🇸🇬 Singapore
Comparison✓ Exact match
Decision✓ Allowed
📱 Mobile · Singapore
XML What GeoComply Returns
error_code=0 · primary=wifi

      
PL How Premier League Compares
server-side · backend

      
💡
Key field to compare: country_code on the primary node (<wifi> when available, otherwise <ip>) — must equal the TV's IP-resolved country. For sub-national licensing, use region_code (e.g. SG-01) instead.

iOS SDK Integration iOS

Native location permission flow on Premier League iOS app
1 System Permission
2 Geolocation
3 Result

PREMIER LEAGUE

📍
Allow "Premier League" to use your location?
Your location is needed to verify Premier League streaming is licensed in your region.
📱 iOS · Singapore

Integration Notes

The Premier League iOS app calls the GeoComply iOS SDK on launch (or before regulated content plays). The SDK uses CoreLocation + Wi-Fi/cell signals to determine the device's region.

If permission is denied, the SDK returns error_code=2 (permission denied) and the app surfaces a troubleshooter explaining how to re-enable location in iOS Settings.

Sample iOS SDK Call

import GeoComplyBG

GeoComplyBG.shared.requestLocation(
  reason: "Premier League streaming",
  license: licenseKey
) { result in
  switch result {
    case .success(let response):
      // XML response — parse country_code
      handler.verify(response.xml)
    case .failure(.permissionDenied):
      ui.showLocationTroubleshooter()
    case .failure(let err):
      log.error(err)
  }
}
Stage 1/ 3

Android SDK Integration ANDROID

Native location permission flow on Premier League Android app
1 System Permission
2 Geolocation
3 Result
📍
Allow Premier League to access this device's location?
📍 Precise
🗺️ Approximate
📱 Android · Singapore

Integration Notes

On Android, the GeoComply SDK uses the FusedLocationProvider and requires ACCESS_FINE_LOCATION. The runtime permission prompt appears the first time the SDK runs.

Approximate location is rejected — Premier League's licensing requires precise GPS to confirm the user is in the correct sub-region. If the user picks Approximate, the SDK returns error_code=3 and the app shows the troubleshooter.

Sample Android SDK Call

import com.geocomply.bg.GeoComplyBG

GeoComplyBG.getInstance(context)
  .setLicense(licenseKey)
  .requestLocation(object : Callback {
    override fun onSuccess(xml: String) {
      // parse country_code from XML
      handler.verify(xml)
    }
    override fun onError(code: Int) {
      if (code == ERR_PERMISSION_DENIED) {
        ui.showLocationTroubleshooter()
      }
    }
  })
Stage 1/ 3
Stage 1/ 5