fix showing ads examples
Seto committed
Nov 28, 2025 at 17:12 UTC
620dbb30e360412a67165df36b8ed9830c9275eb
3 files changed
+89
-40
examples/admob-reactjs/src-tauri/gen-override/android/app/src/main/AndroidManifest.xml
+28
-17
@@ -1,45 +1,56 @@
1
-<?xml version="1.0" encoding="utf-8"?>
1
+<?xml version="1.0" encoding="utf-8" ?>
2
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
3
<uses-permission android:name="android.permission.INTERNET" />
4
- <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
4
+ <uses-permission android:name="com.google.android.gms.permission.AD_ID" />
5
6
<!-- AndroidTV support -->
7
- <uses-feature android:name="android.software.leanback" android:required="false" />
7
+ <uses-feature
8
+ android:name="android.software.leanback"
9
+ android:required="false"
10
+ />
11
12
<application
13
android:icon="@mipmap/ic_launcher"
14
android:label="@string/app_name"
12
- android:theme="@style/Theme.tauri_app"
13
- android:usesCleartextTraffic="${usesCleartextTraffic}">
15
+ android:theme="@style/Theme.admob_reactjs"
16
+ android:usesCleartextTraffic="${usesCleartextTraffic}"
17
+ >
18
<activity
19
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode"
20
android:launchMode="singleTask"
21
android:label="@string/main_activity_title"
22
android:name=".MainActivity"
19
- android:exported="true">
23
+ android:exported="true"
24
+ >
25
<intent-filter>
26
<action android:name="android.intent.action.MAIN" />
27
<category android:name="android.intent.category.LAUNCHER" />
28
<!-- AndroidTV support -->
24
- <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
29
+ <category
30
+ android:name="android.intent.category.LEANBACK_LAUNCHER"
31
+ />
32
</intent-filter>
33
</activity>
34
35
<provider
29
- android:name="androidx.core.content.FileProvider"
30
- android:authorities="${applicationId}.fileprovider"
31
- android:exported="false"
32
- android:grantUriPermissions="true">
36
+ android:name="androidx.core.content.FileProvider"
37
+ android:authorities="${applicationId}.fileprovider"
38
+ android:exported="false"
39
+ android:grantUriPermissions="true"
40
+ >
41
<meta-data
34
- android:name="android.support.FILE_PROVIDER_PATHS"
35
- android:resource="@xml/file_paths" />
42
+ android:name="android.support.FILE_PROVIDER_PATHS"
43
+ android:resource="@xml/file_paths"
44
+ />
45
</provider>
46
47
<meta-data
39
- android:name="com.google.android.gms.ads.APPLICATION_ID"
40
- android:value="ca-app-pub-3940256099942544~3347511713"/>
48
+ android:name="com.google.android.gms.ads.APPLICATION_ID"
49
+ android:value="ca-app-pub-3940256099942544~3347511713"
50
+ />
51
<meta-data
42
- android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
43
- android:value="true"/>
52
+ android:name="com.google.android.gms.ads.DELAY_APP_MEASUREMENT_INIT"
53
+ android:value="true"
54
+ />
55
</application>
56
</manifest>
examples/admob-reactjs/src-tauri/src/lib.rs
+8
@@ -8,6 +8,14 @@ fn greet(name: &str) -> String {
8
pub fn run() {
9
tauri::Builder::default()
10
.plugin(tauri_plugin_opener::init())
11
+ .setup(|#[allow(unused)] app| {
12
+ // Android-only plugin.
13
+ #[cfg(target_os = "android")]
14
+ {
15
+ app.handle().plugin(tauri_plugin_admob::init())?;
16
+ }
17
+ Ok(())
18
+ })
19
.invoke_handler(tauri::generate_handler![greet])
20
.run(tauri::generate_context!())
21
.expect("error while running tauri application");
examples/admob-reactjs/src/App.tsx
+53
-23
@@ -1,16 +1,52 @@
1
-import { useState } from "react";
1
+import { useEffect, useState } from "react";
2
import reactLogo from "./assets/react.svg";
3
-import { invoke } from "@tauri-apps/api/core";
3
+import {
4
+ BannerAd,
5
+ RewardedAd,
6
+ showPrivacyOptionsForm,
7
+} from "tauri-plugin-admob-api";
8
import "./App.css";
9
10
function App() {
7
- const [greetMsg, setGreetMsg] = useState("");
8
- const [name, setName] = useState("");
11
+ const [bannerAd, setBannerAd] = useState<BannerAd>();
12
+ const [rewardedAd, setRewardedAd] = useState<RewardedAd>();
13
10
- async function greet() {
11
- // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/
12
- setGreetMsg(await invoke("greet", { name }));
13
- }
14
+ const showBannerAd = async () => {
15
+ await bannerAd?.show();
16
+ };
17
+
18
+ const showRewardedAd = async () => {
19
+ try {
20
+ await rewardedAd?.show();
21
+ const rewardPromise = await rewardedAd?.onRewarded(async (reward) => {
22
+ console.log("RewardedAd get reward callback:", JSON.stringify(reward));
23
+ });
24
+ console.log(rewardPromise?.event);
25
+ } catch (e) {
26
+ console.log(e);
27
+ }
28
+ };
29
+
30
+ const loadAds = async () => {
31
+ const bannerAd = new BannerAd({
32
+ adUnitId: "ca-app-pub-3940256099942544/9214589741",
33
+ position: "top",
34
+ });
35
+
36
+ const rewardedAd = new RewardedAd({
37
+ adUnitId: "ca-app-pub-3940256099942544/5224354917",
38
+ });
39
+
40
+ await bannerAd.load();
41
+ await rewardedAd.load();
42
+
43
+ setBannerAd(bannerAd);
44
+ setRewardedAd(rewardedAd);
45
+ };
46
+
47
+ useEffect(() => {
48
+ loadAds();
49
+ });
50
51
return (
52
<main className="container">
@@ -29,21 +65,15 @@ function App() {
65
</div>
66
<p>Click on the Tauri, Vite, and React logos to learn more.</p>
67
32
- <form
33
- className="row"
34
- onSubmit={(e) => {
35
- e.preventDefault();
36
- greet();
37
- }}
38
- >
39
- <input
40
- id="greet-input"
41
- onChange={(e) => setName(e.currentTarget.value)}
42
- placeholder="Enter a name..."
43
- />
44
- <button type="submit">Greet</button>
45
- </form>
46
- <p>{greetMsg}</p>
68
+ <div className="row">
69
+ <button onClick={showPrivacyOptionsForm}>Show Privacy Form</button>
70
+ </div>
71
+ <div className="row">
72
+ <button onClick={showBannerAd}>Show Banner Ad</button>
73
+ </div>
74
+ <div className="row">
75
+ <button onClick={showRewardedAd}>Show Rewarded Ad</button>
76
+ </div>
77
</main>
78
);
79
}