Display the Profile Widget
The Gameball profile widget shows customer points, tiers, achievements, leaderboards, available rewards, and full loyalty activity—all inside a native in-app experience.
Use this when the customer taps Rewards , My Points , Loyalty , or any entry point that should open their Gameball profile.
Basic Usage
Swift (Completion Handler)
Swift (With Session Token)
Swift (Async/Await)
import Gameball
let request = ShowProfileRequest (
customerId : "customer-123"
)
GameballApp. getInstance (). showProfile (request, presentationStyle : . fullScreen ) { success, errorMessage in
if success {
print ( "Profile displayed successfully" )
} else {
print ( "Error: \( errorMessage ?? \ " \" )" )
}
}
Request Parameters
Unique permanent identifier of the customer whose profile you want to display. Optional in v3.1.1 (omit for guest mode).
Opens a specific widget section (e.g., "details_earn", "details_redeem").
Defaults to the main profile view.
Hides the widget’s navigation bar. Defaults to false.
Displays a floating close button. Defaults to false.
Hex value (e.g., "#FF5733") for close button color. Only used when showCloseButton = true.
Optional per-request session token. Overrides the global SDK token.
Validation Rules
No validation for customerId (guest mode is allowed). Provide customerId for authenticated profiles.
Advanced Configuration
Open a Specific Section
let request = ShowProfileRequest (
customerId : "customer-123" ,
openDetail : "details_earn"
)
GameballApp. getInstance (). showProfile (request, presentationStyle : . fullScreen ) { _ , _ in }
Guest Mode (v3.1.1+)
// No customerId required
let guestRequest = ShowProfileRequest (
showCloseButton : true ,
closeButtonColor : "#4CAF50"
)
GameballApp. getInstance (). showProfile (guestRequest, presentationStyle : . pageSheet ) { _ , _ in }
let request = ShowProfileRequest (
customerId : "customer-123" ,
showCloseButton : true ,
closeButtonColor : "#FF5733"
)
GameballApp. getInstance (). showProfile (request, presentationStyle : . fullScreen ) { _ , _ in }
Hide Navigation
Best used with openDetail to guide users directly to a specific section when navigation is hidden.
let request = ShowProfileRequest (
customerId : "customer-123" ,
hideNavigation : true ,
openDetail : "details_earn"
)
GameballApp. getInstance (). showProfile (request, presentationStyle : . fullScreen ) { _ , _ in }
Implementation Examples
import UIKit
import Gameball
class ProfileViewController : UIViewController {
@IBAction func showProfileTapped ( _ sender : UIButton) {
let request = ShowProfileRequest (
customerId : "customer-123" ,
showCloseButton : true ,
closeButtonColor : "#4CAF50"
)
GameballApp. getInstance (). showProfile (request, presentationStyle : . fullScreen ) { success, errorMessage in
if let errorMessage = errorMessage {
self . showAlert ( message : errorMessage)
} else if success {
print ( "Profile displayed" )
}
}
}
func showAlert ( message : String ) {
let alert = UIAlertController (
title : "Error" ,
message : message,
preferredStyle : . alert
)
alert. addAction ( UIAlertAction ( title : "OK" , style : . default ))
present (alert, animated : true )
}
}
SwiftUI Integration
import SwiftUI
import Gameball
struct ProfileView : View {
@State private var showError = false
@State private var errorMessage = ""
var body: some View {
VStack {
Button ( "View Rewards & Achievements" ) {
showWidget ()
}
. padding ()
}
. alert ( "Error" , isPresented : $showError) {
Button ( "OK" , role : . cancel ) { }
} message : {
Text (errorMessage)
}
}
func showWidget () {
guard let vc = UIApplication.shared.windows. first ? .rootViewController else {
return
}
let request = ShowProfileRequest (
customerId : "customer-123" ,
showCloseButton : true
)
Task {
do {
try await GameballApp. getInstance (). showProfile (
request,
presentationStyle : . fullScreen ,
presentingViewController : vc
)
} catch {
errorMessage = error. localizedDescription
showError = true
}
}
}
}
Tab Bar Integration
import UIKit
import Gameball
class MainTabBarController : UITabBarController {
override func viewDidLoad () {
super . viewDidLoad ()
delegate = self
}
}
extension MainTabBarController : UITabBarControllerDelegate {
func tabBarController ( _ tabBarController : UITabBarController, shouldSelect viewController : UIViewController) -> Bool {
if viewController.tabBarItem.tag == 2 { // Rewards tab
let request = ShowProfileRequest (
customerId : "customer-123"
)
GameballApp. getInstance (). showProfile (request, presentationStyle : . fullScreen ) { _ , _ in }
return false
}
return true
}
}
Widget Content
Customer Info Points balance, tier, progress, and personal details
Reward Campaigns Available rewards, challenges, badges, and earning opportunities
Leaderboard Ranking, competition, and top performers
Transaction History Full breakdown of points earned and redeemed
All widget themes, layout options, and branding styles can be customized from the Gameball Dashboard.
Best Practices
Make It Discoverable
Add the profile entry point in a visible place (e.g. tab bar, profile screen, side menu).
Use Notification Badges
Indicate new rewards or achievements to drive engagement.
Deep Link Intelligently
Use openDetail to open specific sections after qualifying user actions (e.g., after earning points).
Handle Errors Gracefully
Always provide fallback UI or messaging for network interruptions.
Showing the profile widget right after a reward is earned significantly boosts customer engagement.