Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.DS_Store

!Packages/com.liftoff.windows-ads/Samples~/
!Packages/com.liftoff.windows-ads/Samples~/**
# Claude Code settings
.claude/
CLAUDE.local.md
40 changes: 40 additions & 0 deletions AndroidIOS/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Liftoff Monetize — Android / iOS Unity Test App

Test app for the **Vungle SDK by Liftoff** Unity plugin (`io.liftoff.vungleads`) on Android and iOS.

The Android/iOS plugin is developed in a private repository and released to the [Unity Asset Store](https://assetstore.unity.com/) as **Vungle SDK by Liftoff**. Unlike Windows, the Android/iOS bridge ships as *source* inside the package — Java glue compiled by Unity's Gradle build and Objective-C glue compiled by the generated Xcode project — with the native VungleAds SDK resolved as a prebuilt dependency (Maven / CocoaPods) via External Dependency Manager (EDM4U).

## What's in this folder

| Folder | Contents |
| --- | --- |
| `VungleSDKSampleApp/` | Unity project with the plugin's sample scenes and scripts (interstitial, rewarded, banner, native, and RectTransform-attached banner formats). |

The project references the package locally from [`../Packages/io.liftoff.vungleads/`](../Packages/io.liftoff.vungleads/) via a `file:` dependency in `Packages/manifest.json`, so it always exercises the package version checked into this repo — the same pattern the Windows sample app uses with the Windows package.

## Getting started

1. Open `VungleSDKSampleApp/` in Unity **6000.0.66f2 or newer** (developed with 6000.3.16f1). Unity regenerates `Library/` and the remaining project files on first open.
2. In **Build Settings**, switch the platform to **Android** or **iOS**.
3. Set your own **Company Name / Product Name / Bundle Identifier** in Player Settings.
4. Replace the app ID and placement IDs in `Assets/Samples/Scripts/VungleConstants.cs` with values from your Liftoff Monetize dashboard.
5. Add the scenes under `Assets/Samples/Scenes/` to Build Settings (start with `LaunchScene`).
The sample UI is generated at runtime with TextMeshPro; the required **TMP Essential
Resources** are already included at `Assets/TextMesh Pro/` (if they're ever removed,
re-import via *Window → TextMeshPro → Import TMP Essential Resources*).
Ad text can be in any language, so the sample registers dynamic OS-font fallbacks at
startup for non-Latin glyphs — publishers rendering native-ad text themselves need an
equivalent font-fallback strategy in their own UI.
6. Build:
- **Android** — EDM4U resolves `com.vungle:vungle-ads` from Maven during the Gradle build (run *Assets → External Dependency Manager → Android Resolver → Resolve* if needed).
- **iOS** — EDM4U generates a `Podfile` for the `VungleAds` CocoaPod; open the generated `.xcworkspace` after `pod install`.

## Ad formats covered by the sample scenes

| Scene | Format |
| --- | --- |
| `InterstitialScene` | Interstitial |
| `RewardedScene` | Rewarded |
| `BannerScene`, `DualBanner` | Banner |
| `BannerRectTransformScene` | Banner attached to a RectTransform |
| `NativeScene`, `DualNative` | Native |
132 changes: 132 additions & 0 deletions AndroidIOS/VungleSDKSampleApp/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
# Recommended: add any editor/OS/tool-specific ignore rules from the Global/ templates as needed.
# See: https://github.com/github/gitignore/tree/main/Global
#
.utmp/
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
*.log

# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control.
*.blend1
*.blend1.meta

# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/

# Recordings can get excessive in size
/[Rr]ecordings/

# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*

# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Jetbrains Rider personal-layer settings
*.DotSettings.user

# Visual Studio cache directory
.vs/

# Gradle cache directory
.gradle/

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.slnx
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db

# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta

# Unity3D generated file on crash reports
sysinfo.txt

# Mono auto generated files
mono_crash.*

# Builds
*.apk
*.aab
*.unitypackage
*.unitypackage.meta
*.app

# Crashlytics generated file
crashlytics-build.properties

# TestRunner generated files
InitTestScene*.unity*

# Addressables default ignores, before user customizations
/ServerData
/[Aa]ssets/StreamingAssets/aa*
/[Aa]ssets/AddressableAssetsData/link.xml*
/[Aa]ssets/Addressables_Temp*
# By default, Addressables content builds will generate addressables_content_state.bin
# files in platform-specific subfolders, for example:
# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin
/[Aa]ssets/AddressableAssetsData/*/*.bin*

# Visual Scripting auto-generated files
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta

# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*

# Auto-generated cache in Assets folder
/[Aa]ssets/[Ss]ceneDependencyCache*

# --- OS / editor rules (from github/gitignore Global templates) ---
# Note: the Linux template's `*~` pattern is intentionally omitted — it would
# match Unity's `Samples~`/`Documentation~` hidden-folder convention.

# macOS
.DS_Store
.AppleDouble
.LSOverride
._*

# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/

# JetBrains IDEs
.idea/

# Visual Studio Code
.vscode/

# Local build tooling (not part of the sample)
/[Aa]ssets/Editor/
/[Aa]ssets/Editor.meta
8 changes: 8 additions & 0 deletions AndroidIOS/VungleSDKSampleApp/Assets/Plugins.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions AndroidIOS/VungleSDKSampleApp/Assets/Plugins/Android.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
unityStreamingAssets=**STREAMING_ASSETS**
# Android Resolver Properties Start
android.useAndroidX=true
android.enableJetifier=true
# Android Resolver Properties End
**ADDITIONAL_PROPERTIES**

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
apply plugin: 'com.android.library'
apply from: '../shared/keepUnitySymbols.gradle'
apply from: '../shared/common.gradle'
**APPLY_PLUGINS**

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// Android Resolver Dependencies Start
implementation 'com.vungle:vungle-ads:[7.7,8.0)' // Packages/io.liftoff.vungleads/Editor/Vungle/VungleDependencies.xml:3
// Android Resolver Dependencies End
**DEPS**}

// Android Resolver Exclusions Start
android {
packaging {
exclude ('/lib/armeabi/*' + '*')
exclude ('/lib/armeabi-v7a/*' + '*')
exclude ('/lib/mips/*' + '*')
exclude ('/lib/mips64/*' + '*')
exclude ('/lib/x86/*' + '*')
exclude ('/lib/x86_64/*' + '*')
}
}
// Android Resolver Exclusions End
android {
namespace "com.unity3d.player"
ndkPath "**NDKPATH**"
ndkVersion "**NDKVERSION**"
compileSdk **APIVERSION**
buildToolsVersion "**BUILDTOOLS**"

compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}

defaultConfig {
minSdk **MINSDK**
targetSdk **TARGETSDK**
ndk {
abiFilters **ABIFILTERS**
debugSymbolLevel **DEBUGSYMBOLLEVEL**
}
consumerProguardFiles 'proguard-unity.txt'**USER_PROGUARD**
**DEFAULT_CONFIG_SETUP**
}

lint {
abortOnError false
}

androidResources {
noCompress = **BUILTIN_NOCOMPRESS** + unityStreamingAssets.tokenize(', ')
ignoreAssetsPattern = "!.svn:!.git:!.ds_store:!*.scc:!CVS:!thumbs.db:!picasa.ini:!*~"
}**PACKAGING**
}
**IL_CPP_BUILD_SETUP**
**SOURCE_BUILD_SETUP**
**EXTERNAL_SOURCES**

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
pluginManagement {
repositories {
**ARTIFACTORYREPOSITORY**
gradlePluginPortal()
google()
mavenCentral()
}
}

include ':launcher', ':unityLibrary'
**INCLUDES**

dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
**ARTIFACTORYREPOSITORY**
google()
mavenCentral()
// Android Resolver Repos Start
def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
mavenLocal()
// Android Resolver Repos End
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions AndroidIOS/VungleSDKSampleApp/Assets/Samples.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions AndroidIOS/VungleSDKSampleApp/Assets/Samples/Scenes.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading