@maccesar/titools 5.2.0 → 5.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +82 -0
- package/README.md +83 -72
- package/agents/ti-pro.md +1 -1
- package/commands/ti-audit.md +2 -2
- package/docs/examples.md +91 -0
- package/docs/knowledge-index.md +57 -0
- package/lib/commands/uninstall.js +19 -16
- package/lib/commands/update.js +1 -1
- package/lib/downloader.js +1 -1
- package/lib/utils.js +2 -0
- package/package.json +4 -2
- package/skills/purgetss/references/multi-density-images.md +1 -1
- package/skills/ti-admob-unified/SKILL.md +21 -7
- package/skills/ti-admob-unified/assets/example/app.js +229 -25
- package/skills/ti-admob-unified/assets/example/lib/ads.js +30 -2
- package/skills/ti-admob-unified/assets/example/library-usage.js +33 -1
- package/skills/ti-admob-unified/references/api-reference.md +39 -16
- package/skills/ti-admob-unified/references/banners.md +9 -9
- package/skills/ti-admob-unified/references/contributing.md +14 -9
- package/skills/ti-admob-unified/references/dependencies.md +31 -25
- package/skills/ti-admob-unified/references/fullscreen.md +43 -28
- package/skills/ti-admob-unified/references/game-monetization.md +138 -7
- package/skills/ti-admob-unified/references/getting-started.md +75 -31
- package/skills/ti-admob-unified/references/index.md +5 -2
- package/skills/ti-admob-unified/references/integration.md +8 -6
- package/skills/ti-admob-unified/references/library.md +41 -10
- package/skills/ti-admob-unified/references/mediation-parity.md +17 -0
- package/skills/ti-admob-unified/references/mediation.md +22 -9
- package/skills/ti-admob-unified/references/migration.md +11 -7
- package/skills/ti-admob-unified/references/module-changelog.md +41 -11
- package/skills/ti-admob-unified/references/privacy.md +35 -8
- package/skills/ti-admob-unified/references/production.md +67 -0
- package/skills/ti-admob-unified/references/rewarded-interstitial.md +101 -0
- package/skills/ti-admob-unified/references/roadmap.md +28 -31
- package/skills/ti-admob-unified/references/source-notes.md +51 -4
- package/skills/ti-admob-unified/references/source-snapshot.json +249 -45
- package/skills/ti-admob-unified/references/third-party-notices.md +4 -4
- package/skills/ti-game/SKILL.md +23 -6
- package/skills/ti-game/references/api.md +34 -30
- package/skills/ti-game/references/debugging-performance.md +18 -9
- package/skills/ti-game/references/examples.md +103 -20
- package/skills/ti-game/references/input.md +101 -0
- package/skills/ti-game/references/patterns.md +39 -15
- package/skills/ti-game/references/physics.md +80 -52
- package/skills/ti-game/references/project-setup.md +118 -56
- package/skills/ti-game/references/recipes-action.md +107 -8
- package/skills/ti-game/references/recipes-adventure-effects.md +41 -9
- package/skills/ti-game/references/roadmap.md +10 -3
- package/skills/ti-game/references/source-notes.md +81 -0
- package/skills/ti-game/references/tilemaps.md +12 -4
- package/skills/ti-synthengine/SKILL.md +81 -95
- package/skills/ti-synthengine/assets/example/README.md +84 -0
- package/skills/ti-synthengine/assets/example/app.js +1178 -0
- package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +83 -0
- package/skills/ti-synthengine/assets/example/lib/sequenceScore.js +25 -0
- package/skills/ti-synthengine/references/advanced-examples.md +174 -0
- package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
- package/skills/ti-synthengine/references/android-sim80-correction.json +162 -0
- package/skills/ti-synthengine/references/api.md +434 -380
- package/skills/ti-synthengine/references/audio-engine.md +157 -230
- package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
- package/skills/ti-synthengine/references/examples.md +123 -253
- package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-physical-validation.json +1918 -0
- package/skills/ti-synthengine/references/guide.md +188 -156
- package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
- package/skills/ti-synthengine/references/performance-review.json +1146 -0
- package/skills/ti-synthengine/references/physical-validation.json +1457 -0
- package/skills/ti-synthengine/references/recipes-interaction.md +549 -0
- package/skills/ti-synthengine/references/recipes.md +423 -599
- package/skills/ti-synthengine/references/recommendations.md +63 -113
- package/skills/ti-synthengine/references/sound-design.md +134 -258
- package/skills/ti-synthengine/references/source-notes.md +93 -105
- package/skills/ti-synthengine/references/source-snapshot.json +379 -32
- package/skills/ti-synthengine/references/stats-performance.md +64 -20
- package/skills/ti-synthengine/references/studio-validation.json +6202 -0
- package/skills/ti-synthengine/references/troubleshooting.md +109 -121
- package/skills/ti-synthengine/references/unified-bypass-performance.json +22425 -0
- package/skills/ti-synthengine/references/unified-validation.json +314 -0
- package/AGENTS-VERCEL-RESEARCH.md +0 -175
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
> Source snapshot: official ti.admob.unified 1.0.0 documentation at release source commit `034843299b2984253988e0ffccb9f6a1c91682c9` (copied 2026-10-24). Relative links rebased for this skill.
|
|
2
|
+
|
|
3
|
+
# Rewarded interstitial ads
|
|
4
|
+
|
|
5
|
+
Rewarded interstitials offer a reward at a natural transition, such as the end of a level. Before showing one, your app must explain the reward and give the user a way to skip the ad. The native proxy does not create that introduction for you. See Google's requirements for [Android](https://developers.google.com/admob/android/rewarded-interstitial) and [iOS](https://developers.google.com/admob/ios/rewarded-interstitial).
|
|
6
|
+
|
|
7
|
+
Use `createRewarded()` for a placement the user explicitly chooses to open in exchange for a reward. Use `createRewardedInterstitial()` for a transition placement with its required introduction. An ordinary interstitial must not offer a reward.
|
|
8
|
+
|
|
9
|
+
## Load ahead of the transition
|
|
10
|
+
|
|
11
|
+
After UMP permits requests and initialization completes:
|
|
12
|
+
|
|
13
|
+
```js
|
|
14
|
+
const Admob = require('ti.admob.unified')
|
|
15
|
+
const ad = Admob.createRewardedInterstitial({
|
|
16
|
+
adUnitId: Admob.TEST_REWARDED_INTERSTITIAL,
|
|
17
|
+
autoReload: false,
|
|
18
|
+
requestAgent: 'my Titanium app'
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
function onReward(event) {
|
|
22
|
+
Ti.API.info(`Earned ${event.rewardAmount} ${event.rewardType}`)
|
|
23
|
+
// Credit the reward here, using the values reported by the SDK.
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function onLoaded() {
|
|
27
|
+
Ti.API.info('Rewarded interstitial is ready for a later transition')
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
ad.addEventListener(Admob.AD_REWARDED, onReward)
|
|
31
|
+
ad.addEventListener(Admob.AD_LOADED, onLoaded)
|
|
32
|
+
ad.load()
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Preloading does not present the ad. An explicit Show request may wait for loading and present when ready, provided the app cancels it when the presentation context ends.
|
|
36
|
+
|
|
37
|
+
## Explain the reward and allow skipping
|
|
38
|
+
|
|
39
|
+
The [playground](../assets/example/app.js) explains the demo reward and AdMob’s requirements in its card and links to the [official rule](https://support.google.com/admob/answer/9884467?hl=en). Show opens a dialog with Watch test ad and Skip. Skip cancels the pending presentation; Watch permits it. If a size change requires a replacement, the example waits and presents it without another Show tap. Leaving the foreground, losing eligibility, closing the window or selecting another fullscreen invalidates an outstanding introduction.
|
|
40
|
+
|
|
41
|
+
The production example below uses an AlertDialog with visible Watch and Skip buttons on both platforms. An iPad OptionDialog popover hides its cancel item, so it does not provide the same visible Skip button.
|
|
42
|
+
|
|
43
|
+
Use the reward configured for your ad unit in the introduction. The module reports the actual reward in `rewarded`; it does not expose a pre-presentation reward getter.
|
|
44
|
+
|
|
45
|
+
```js
|
|
46
|
+
function offerTransitionAd(rewardDescription, continueApp) {
|
|
47
|
+
if (!Admob.canRequestAds() || !ad.isLoaded()) {
|
|
48
|
+
continueApp()
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const intro = Ti.UI.createAlertDialog({
|
|
53
|
+
title: 'Rewarded interstitial',
|
|
54
|
+
message: `Complete the ad to earn ${rewardDescription}. You can skip it.`,
|
|
55
|
+
buttonNames: ['Watch ad', 'Skip'],
|
|
56
|
+
cancel: 1
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
function onChoice(event) {
|
|
60
|
+
intro.removeEventListener('click', onChoice)
|
|
61
|
+
if (event.index === 0 && Admob.canRequestAds() && ad.isLoaded()) {
|
|
62
|
+
ad.show()
|
|
63
|
+
} else {
|
|
64
|
+
continueApp()
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
intro.addEventListener('click', onChoice)
|
|
69
|
+
intro.show()
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Connect `closed` and `failed_to_show` to the app's continuation too, so a presentation error cannot strand navigation. Use a continuation that runs once. Coordinate the introduction with your window's lifetime and other modal flows. Raw API consumers must also recheck fullscreen dimensions if the app rotates while the introduction is open; the [integration library](library.md#fullscreen-ads) handles that check at `show()`.
|
|
74
|
+
|
|
75
|
+
## Shared lifecycle and rewards
|
|
76
|
+
|
|
77
|
+
The proxy exposes `load()`, `show()`, `isLoaded()` and terminal `destroy()` on both platforms. It accepts the same mutable properties as Rewarded: `adUnitId`, `autoReload`, `keywords`, `requestAgent` and `extras`. See [fullscreen configuration](fullscreen.md#creation-properties).
|
|
78
|
+
|
|
79
|
+
Events use `adType: 'rewarded_interstitial'` and the shared [fullscreen payloads](fullscreen.md#events). Only `rewarded` grants a reward; closing, clicking or recording an impression does not. A repeated native reward callback emits at most one reward per presentation. The event preserves the presented ad's unit ID and SDK reward even if the next ad starts loading before that callback arrives.
|
|
80
|
+
|
|
81
|
+
The native ad is single-use. Load again after dismissal, or use `autoReload: true` to reload after `closed`. That option never presents the next ad. Handle load/show failures at a later opportunity rather than creating an immediate retry loop.
|
|
82
|
+
|
|
83
|
+
## Use the integration library
|
|
84
|
+
|
|
85
|
+
`ads.createRewardedInterstitial(options)` returns the same manager as `ads.createRewarded(options)`, including `load()`, `show()`, `retry()`, `isLoaded()` and `destroy()`. Pass the same callbacks, including `onRewarded`. Call the manager's `show()` only after your introduction permits presentation.
|
|
86
|
+
|
|
87
|
+
The [raw demo](../assets/example/app.js) includes a skip option and uses Google test traffic. The [library example](../assets/example/library-usage.js) shows the equivalent manager integration.
|
|
88
|
+
|
|
89
|
+
## Cleanup and validation
|
|
90
|
+
|
|
91
|
+
Remove named listeners before disposal:
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
ad.removeEventListener(Admob.AD_REWARDED, onReward)
|
|
95
|
+
ad.removeEventListener(Admob.AD_LOADED, onLoaded)
|
|
96
|
+
ad.destroy()
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Destroy is idempotent and terminal. Late native callbacks cannot revive the proxy or grant another reward.
|
|
100
|
+
|
|
101
|
+
Native builds, wrapper tests and an iPadOS 18.6 simulator pass cover this implementation. The simulator pass verified visible Watch/Skip buttons, presentation, a single SDK reward, dismissal, reload and the Show-time orientation guard. Physical tests on an iPad (9th generation, iPadOS 27.0.1) and an OPPO CPH2639 (Android 16) confirmed visible test content, presentation, one SDK reward per completed ad, dismissal and reload. Android also verified that one Show tap after rotation replaces the stale ad and presents its replacement. The current playground introduces the reward in a dialog with visible Watch test ad and Skip buttons. See [release readiness](roadmap.md#release-readiness) for remaining coverage. Provider delivery requires its own mappings and single-source tests.
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
> Source snapshot: official ti.admob.unified 1.0.0 documentation at commit `
|
|
1
|
+
> Source snapshot: official ti.admob.unified 1.0.0 documentation at release source commit `034843299b2984253988e0ffccb9f6a1c91682c9` (copied 2026-10-24). Relative links rebased for this skill.
|
|
2
2
|
|
|
3
3
|
# ti.admob.unified roadmap
|
|
4
4
|
|
|
5
5
|
## Current baseline
|
|
6
6
|
|
|
7
|
-
Version `1.0.0`
|
|
7
|
+
Version `1.0.0` includes the core and five optional mediation complements:
|
|
8
8
|
|
|
9
|
-
- Titanium `13.
|
|
9
|
+
- Titanium `13.4.1.GA`
|
|
10
10
|
- iOS `15.0+`
|
|
11
|
-
- Google Mobile Ads iOS `13.
|
|
11
|
+
- Google Mobile Ads iOS `13.11.0`
|
|
12
12
|
- User Messaging Platform iOS `3.1.0`
|
|
13
|
-
- Android API `24+`,
|
|
13
|
+
- Android API `24+`, required by the pinned Google Mobile Ads SDK
|
|
14
14
|
- Google Mobile Ads Android `25.5.0`
|
|
15
15
|
- User Messaging Platform Android `4.0.0`
|
|
16
16
|
- five optional per-network modules on iOS and Android; ironSource mediation deferred
|
|
17
17
|
- idempotent initialization and consent
|
|
18
18
|
- terminal `consent_complete` events
|
|
19
19
|
- one standard/adaptive banner lifecycle on both platforms
|
|
20
|
-
- one interstitial/rewarded/app open lifecycle and event contract on both platforms
|
|
20
|
+
- one interstitial/rewarded/rewarded interstitial/app open lifecycle and event contract on both platforms
|
|
21
21
|
- portable tracking-authorization completion on both platforms
|
|
22
22
|
- no manual TCF personalization inference
|
|
23
23
|
|
|
@@ -47,7 +47,7 @@ Version `1.0.0` establishes one portable AdMob distribution with five optional m
|
|
|
47
47
|
|
|
48
48
|
### Fullscreen contract
|
|
49
49
|
|
|
50
|
-
- Interstitial, rewarded, and app open proxies expose the same `load()`, `show()`, `isLoaded()`, and terminal `destroy()` lifecycle.
|
|
50
|
+
- Interstitial, rewarded, rewarded interstitial, and app open proxies expose the same `load()`, `show()`, `isLoaded()`, and terminal `destroy()` lifecycle.
|
|
51
51
|
- Duplicate loads are serialized and native fullscreen references are single-use.
|
|
52
52
|
- Common events include `adUnitId` and `adType`; failures add `error`, `message`, and `code`.
|
|
53
53
|
- Both platforms emit `opened`, `showed_fullscreen_content`, and `destroyed`.
|
|
@@ -56,26 +56,33 @@ Version `1.0.0` establishes one portable AdMob distribution with five optional m
|
|
|
56
56
|
|
|
57
57
|
### Distribution
|
|
58
58
|
|
|
59
|
-
- The `ti.admob.unified` artifacts contain Google Mobile Ads and UMP
|
|
59
|
+
- The `ti.admob.unified` artifacts contain Google Mobile Ads and UMP, with no third-party ad-network SDK in the core POM. Android resolves its SDK dependencies during the consumer build, so module ZIP size is not the installed app size.
|
|
60
60
|
- Five dependency modules under `mediation/<network>/` distribute eleven iOS frameworks and five Android adapter coordinates. Unity includes Coherence; neither AdQuality nor ironSource advertising is included.
|
|
61
61
|
- Dependency versions and iOS checksums are reproducible.
|
|
62
62
|
- Static contract tests cover privacy, lifecycle, payload, cleanup, artifacts, and documentation.
|
|
63
63
|
|
|
64
64
|
## Release readiness
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
Rewarded Interstitial was added after the earlier five-format checks. Its native builds and wrapper tests pass. Physical iPadOS 27.0.1 and Android 16 tests confirmed visible Google test content, presentation, SDK rewards, dismissal and reload. The playground explains the reward in its card and offers Watch test ad or Skip in a dialog after Show. Selected-provider delivery still needs configured accounts and mappings.
|
|
67
67
|
|
|
68
|
-
The
|
|
68
|
+
The maintainer reported a store-published app using the module on October 23, 2026. The checks below record what has been verified. Open issues remain listed until a retest confirms a fix.
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
The September checks covered both native bridges, wrapper Boolean types, all five implemented formats, library cleanup/reentrant retries, consent reset ordering, volume validation and delayed reward callbacks. Core-only and selected-complement consumers were compiled on both platforms. Physical-iPad tests confirmed fullscreen presentation, dismissal and Rewarded delivery; a previous rotation-specific size failure recovered after reloading. The current library instead checks dimensions at Show and reloads only the incompatible ad. That revised policy has build/test coverage. An October 24 physical Android test also verified a single Show tap replacing a stale ad after rotation and presenting the replacement when loaded.
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
- cover consent acceptance/rejection, privacy reopening, ATT states and orientation/lifecycle changes on the available devices;
|
|
74
|
-
- retain the intermittent iOS Rewarded timeout and its UIKit reproduction until a reproducible SDK/runtime resolution is established;
|
|
75
|
-
- verify provider-side consent propagation and review the updated transitive dependency results in [Dependencies](dependencies.md#transitive-security-review);
|
|
76
|
-
- validate intended mediation providers with configured accounts, mappings and Ad Inspector. Core-only applications need no provider accounts.
|
|
72
|
+
The October 23 dependency refresh passed physical Android 16 load checks for standard and adaptive banners, interstitial, rewarded and app open ads. An isolated consumer build completed consent and initialization, loaded test interstitial/rewarded ads and resumed from the background. SDK startup now runs outside the Android UI thread. These checks do not establish third-party provider delivery.
|
|
77
73
|
|
|
78
|
-
|
|
74
|
+
Earlier simulator runs had fullscreen request timeouts. A later October 23 iPadOS 18.6 simulator pass rendered fixed/adaptive banners and all four fullscreen formats, verified one reward per completed Rewarded and Rewarded Interstitial presentation, and exercised the rotation guard and background recovery. It also covered ATT denial, a permission change in Settings, UMP rejection and privacy reopening. The demo now keeps its Skip button visible on iPad. These simulator results do not close the physical-iPad issues below; the updated binaries still need physical-iOS acceptance.
|
|
75
|
+
|
|
76
|
+
Known issues and remaining coverage:
|
|
77
|
+
|
|
78
|
+
- A physical iPad intermittently renders Google's Interstitial demo creative with a zero-width image-bearing SVG inside a correctly sized WebView. Independent UIKit, React Native and Flutter integrations also reproduce it with GMA 13.11.0. A bounded native workaround restores the collapsed column-flex Google SVG on iPad, based on the detected markup rather than the unit ID. Integrated demo presentations confirmed a visible image. The workaround uses internal creative markup and is not an official SDK fix. It also checks publisher-owned Interstitial units for that exact failure; production creative rendering remains unverified.
|
|
79
|
+
- Intermittent iOS Rewarded timeouts, including a reproduction without Titanium, remain unresolved; a public error alone does not establish the cause.
|
|
80
|
+
- An earlier physical-iPad adaptive startup sizing failure did not recur in repeated launches; its cause was not isolated.
|
|
81
|
+
- Complete the consent acceptance/rejection, privacy reopening, ATT, banner orientation and lifecycle matrix on available physical devices. Complete physical-iPad coverage of the final example's Show-time dimension policy; the Android replacement-and-show path has passed.
|
|
82
|
+
- Provider delivery and consent propagation require configured publisher accounts, mappings and Ad Inspector single-source tests. Google test ads and adapter initialization do not establish them. Core-only apps need no provider accounts.
|
|
83
|
+
- The declared minimum OS versions have not been validated across a complete physical-device matrix. Keep simulator/emulator results separate from hardware results.
|
|
84
|
+
|
|
85
|
+
The pinned dependency matrix is recorded in [Dependencies](dependencies.md), including the dated transitive security review. Follow [Shipping an application](production.md) for the publisher's production checks. A module build, app-store approval or a version scan does not establish every runtime scenario.
|
|
79
86
|
|
|
80
87
|
## Next contract work
|
|
81
88
|
|
|
@@ -103,11 +110,11 @@ Both platforms must expose an identical JavaScript surface. An audit against the
|
|
|
103
110
|
|
|
104
111
|
## Differences that stay
|
|
105
112
|
|
|
106
|
-
|
|
113
|
+
These differences come from the native SDKs and remain documented limitations:
|
|
107
114
|
|
|
108
115
|
| Difference | Why it stays |
|
|
109
116
|
| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
110
|
-
| `module_initialized`
|
|
117
|
+
| `module_initialized` describes core completion | Native initialization callbacks provide status rather than a unified error contract. Android can emit `success: false` before startup when no Activity exists. Adapter failures belong in `getMediationStatus()`; synchronous native exceptions may also propagate. |
|
|
111
118
|
| `applicable` in `tracking_authorization_completed` | App Tracking Transparency does not exist on Android. |
|
|
112
119
|
| The values of the `TEST_*` constants | They are Google's own demo unit IDs, deliberately different per platform. |
|
|
113
120
|
| `isTestDevice()` | iOS answers "are any test devices registered?", Android "is this device one?". The iOS SDK does not offer the second. |
|
|
@@ -115,17 +122,7 @@ The following differences are classified as SDK limitations and are documented w
|
|
|
115
122
|
|
|
116
123
|
## Deferred formats
|
|
117
124
|
|
|
118
|
-
|
|
119
|
-
- Native
|
|
120
|
-
|
|
121
|
-
Their constants are already exported, but they do not have working cross-platform factories. Implementing one requires a complete native proxy, shared events and payloads, cleanup semantics, tests, examples, and physical validation.
|
|
122
|
-
|
|
123
|
-
These formats remain to be implemented to match the modules this one replaces. As of 4 August 2026: `ti.android.admob` `11.1.0` ships proxies for app open, rewarded interstitial and native, and `ti.admob` `8.1.0` on iOS documents an `AD_TYPE_APP_OPEN`. App open ships here on both platforms, which leaves rewarded interstitial and native.
|
|
124
|
-
|
|
125
|
-
Decided on 4 August 2026:
|
|
126
|
-
|
|
127
|
-
- Rewarded interstitial is planned next. App open came first because it was the only format present in both replaced modules.
|
|
128
|
-
- Native remains deferred because none of the applications in progress has a content list that needs ads styled as list items. The decision reflects current use cases, rather than implementation difficulty. A future app with a content feed would justify reconsidering it.
|
|
125
|
+
Native remains reserved without a factory. Its constants are already exported. Implementation requires a complete native proxy, shared events and payloads, cleanup semantics, tests, examples, and physical validation.
|
|
129
126
|
|
|
130
127
|
Each new format must meet the existing contract: a complete native proxy on both platforms, shared events and payloads, terminal cleanup, contract tests, an example, and physical validation.
|
|
131
128
|
|
|
@@ -137,7 +134,7 @@ The five complements live in `mediation/<network>/` and target the same first re
|
|
|
137
134
|
- Keep every adapter out of the core module. A contract test fails if `ios/module.xcconfig`, `android/build.gradle`, the core `pbxproj`, or the core checksum inventory names a network again.
|
|
138
135
|
- Preserve one JavaScript ad contract and portable diagnostics.
|
|
139
136
|
- Track privacy manifests, resource bundles, SKAdNetwork guidance, and store disclosure changes with every dependency update.
|
|
140
|
-
- Require consumer
|
|
137
|
+
- Require the consumer build matrix described in the mediation guide before release. Record physical-device coverage separately from simulator integration. Validate each provider with configured accounts, mappings and Ad Inspector before claiming its ad delivery; Google test ads establish integration only.
|
|
141
138
|
- Evaluate additional networks only when they can be supported on both platforms without fragmenting the public API.
|
|
142
139
|
|
|
143
140
|
## Longer-term platform work
|
|
@@ -4,11 +4,56 @@ The native module is `ti.admob.unified`; this skill is `ti-admob-unified`. It wo
|
|
|
4
4
|
|
|
5
5
|
## Provenance
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Reviewed against public official **1.0.0** source
|
|
8
|
+
`034843299b2984253988e0ffccb9f6a1c91682c9` on 2026-10-24. Clean local HEAD,
|
|
9
|
+
remote main and Android/iOS annotated release tags match. Repository visibility
|
|
10
|
+
and non-draft/non-prerelease platform releases were verified.
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+
| Platform | Published downloads | Verified core ZIP SHA-256 |
|
|
13
|
+
| --- | --- | --- |
|
|
14
|
+
| Android | [android-1.0.0](https://github.com/macCesar/ti.admob.unified/releases/tag/android-1.0.0) | `533ae21b6462ba2d773209f91ea607e975ce34413b165c1d77a34fc5680ec055` |
|
|
15
|
+
| iOS | [ios-1.0.0](https://github.com/macCesar/ti.admob.unified/releases/tag/ios-1.0.0) | `665e0ad85c0d343c47bc1b671d57a1f2ac41cb9f57305053c6ab64b7951ebb20` |
|
|
10
16
|
|
|
11
|
-
|
|
17
|
+
Both core archives were downloaded, independently hashed and CRC/manifest
|
|
18
|
+
checked without installation. Each release's SHA256SUMS lists core plus five
|
|
19
|
+
optional network ZIPs; all twelve hashes match published GitHub asset digests.
|
|
20
|
+
Complement binaries were not downloaded or executed. Core manifests require
|
|
21
|
+
Titanium 13.4.1.GA; Android has four ABIs and Apple declares `mac:false`.
|
|
22
|
+
App requirements also include iOS 15+, Android API 24+ and compile SDK 36. Use
|
|
23
|
+
[installation guidance](getting-started.md) and only selected complements;
|
|
24
|
+
installing adapters alone does not configure provider demand.
|
|
25
|
+
|
|
26
|
+
`source-snapshot.json` records each source, original/mirror hash and declared
|
|
27
|
+
link/correction transformations. It covers thirteen official documentation pages,
|
|
28
|
+
dependency/roadmap/contributing/changelog/license material and the public
|
|
29
|
+
[mediation parity comparison](mediation-parity.md). The root README is a reviewed,
|
|
30
|
+
hashed exclusion whose operational requirements map to the available guides.
|
|
31
|
+
|
|
32
|
+
The three official JavaScript resources under `assets/example/` remain
|
|
33
|
+
byte-identical. Copy `lib/ads.js` unchanged; keep app policy/director logic
|
|
34
|
+
outside it. The curated [game guide](game-monetization.md) and this provenance
|
|
35
|
+
note are TiTools contributions rather than upstream mirrors.
|
|
36
|
+
|
|
37
|
+
## Current source distinctions
|
|
38
|
+
|
|
39
|
+
- Rewarded interstitial and synchronous ATT status query are implemented.
|
|
40
|
+
Read the dedicated format/production guides before integration; older
|
|
41
|
+
unsupported-format guidance does not describe this release.
|
|
42
|
+
- Native `autoReload` is read live at fullscreen close. The other four mutable
|
|
43
|
+
request options affect the next load. Official API/fullscreen prose grouped
|
|
44
|
+
all five as next-load properties; exact reversible errata preserve original
|
|
45
|
+
source hashes while describing current native behavior.
|
|
46
|
+
- Raw proxy `load()`/`show()` do not return success. Manager returns and mocked
|
|
47
|
+
tests do not establish a delivered ad. UMP consent, ATT query, initialization,
|
|
48
|
+
per-format layout and account readiness remain separate boundaries.
|
|
49
|
+
- The iOS collapsed-SVG repair is narrowly scoped to the Google interstitial
|
|
50
|
+
creative case documented in source. Host lifecycle/DOM assertions are not
|
|
51
|
+
new physical visual acceptance or a generic creative replacement API.
|
|
52
|
+
|
|
53
|
+
The earlier skill pin `5b4cbf9` is no longer resolvable in the source checkout.
|
|
54
|
+
The audit uses prior shipped mirrors/library as its documentation baseline and
|
|
55
|
+
verifies current released implementation independently. It does not invent an
|
|
56
|
+
unavailable historical native diff or restore removed private history.
|
|
12
57
|
|
|
13
58
|
## Source priority and updates
|
|
14
59
|
|
|
@@ -30,4 +75,6 @@ node scripts/verify-module-snapshot.mjs --source /path/to/ti.admob.unified
|
|
|
30
75
|
|
|
31
76
|
It reports changed/missing sources, newly added official Markdown, modified shipped mirrors, source dirtiness and commit changes. It performs no fetch, pull, write or hash refresh. Compare the pinned commit to the candidate commit, review the report and relevant native/library changes, then perform only the authorized update. Native-module releases, provider SDK changes and official-doc corrections can all trigger a review.
|
|
32
77
|
|
|
33
|
-
|
|
78
|
+
The old broken mediation heading link was corrected upstream and no longer
|
|
79
|
+
needs a local transformation. Current semantic errata are explicitly recorded
|
|
80
|
+
and reconstructed by the source-fidelity regression.
|