Plugin

NativeUtils

Thông tin app/thiết bị và các thao tác native nhỏ mà Godot chưa có sẵn: chia sẻ, đánh giá app, Advertising ID, Install Referrer.

v1.0.0 Android iOS Autoload NativeUtils Addon leono_nativeutils
Tải addon (.zip) Hướng dẫn cài

Gồm thư viện Android. Thư viện iOS chưa có trong gói (cần build trên Mac) — trên iOS các hàm trả giá trị mặc định. Giải nén vào thư mục gốc project Godot.

Cài đặt

Làm theo Cài đặt nhanh với addon leono_nativeutils. Plugin không cần key hay file cấu hình nào.

Nền tảngTự động thêm khi export
AndroidPermission ACCESS_NETWORK_STATE, thư viện com.google.android.play:review, com.android.installreferrer:installreferrer
iOSFramework StoreKit, Network

Bắt đầu

var app := NativeUtils.get_app_info()
# {id, version_name, version_code, installer}
var dev := NativeUtils.get_device_info()
# {brand, manufacturer, model, os_version, sdk_int, is_emulator, total_ram_mb}

NativeUtils.set_clipboard("ABC-123")
NativeUtils.share_text("Chơi cùng mình nhé! https://...", "Mời bạn")

# Hàm bất đồng bộ — dùng await
var ref := await NativeUtils.get_install_referrer()
if ref.has("params"):
    print(ref.params.get("utm_source", ""))

await NativeUtils.request_review()

Cấu hình

Trong Project Settings → leono/nativeutils (bật Advanced Settings). Mặc định đều tắt.

SettingKiểuMặc địnhTác dụng
advertising_idboolfalseBật Advertising ID. Android: thêm play-services-ads-identifier + permission AD_ID. iOS: link AdSupport + AppTrackingTransparency
ios_tracking_usage_descriptionString""Câu giải thích trong popup App Tracking Transparency. Bắt buộc cho iOS khi bật advertising_id

API reference

get_app_info()get_device_info() get_free_storage_mb()get_battery() get_network_type()get_language() get_country()get_timezone() get_device_id()get_screen_size() get_clipboard()set_clipboard() is_native()share_text() show_toast()open_url() open_store_page()vibrate() set_keep_screen_on()request_review() get_advertising_id()get_install_referrer()

Thông tin app & thiết bị

get_app_info() → DictionaryAndroidiOS

Thông tin bản build đang chạy.

KeyKiểuMô tả
idStringPackage name (Android) / bundle id (iOS)
version_nameStringVí dụ "1.2.0"
version_codeintversionCode (Android) / CFBundleVersion (iOS)
installerStringAndroid: package của store, ví dụ com.android.vending, rỗng nếu cài APK. iOS: appstore · testflight · development · simulator
get_device_info() → DictionaryAndroidiOS
KeyKiểuMô tả
brand / manufacturerStringiOS luôn là "Apple"
modelStringAndroid: "SM-S918B". iOS: mã máy "iPhone15,2"
os_versionString"14" / "17.4"
sdk_intintAPI level Android; iOS là 0
is_emulatorboolEmulator Android (theo build props) / iOS Simulator
total_ram_mbintRAM vật lý
get_free_storage_mb() → intAndroidiOS

Dung lượng trống (MB). Nên kiểm tra trước khi tải gói nội dung lớn.

get_battery() → DictionaryAndroidiOS

{level, charging} — level từ 0 đến 100, -1 nếu không đọc được (iOS Simulator).

get_network_type() → StringAndroidiOS

Một trong "wifi", "cellular", "ethernet", "other", "none".

if NativeUtils.get_network_type() == "cellular":
    show_download_warning()
get_language() → StringGodot built-in

Mã ngôn ngữ hệ thống, ví dụ "vi".

get_country() → StringGodot built-in

Mã quốc gia theo locale hệ thống, ví dụ "VN"; rỗng nếu locale không có phần quốc gia. Đây là cài đặt máy, không phải vị trí thực.

get_timezone() → DictionaryGodot built-in

{bias, name} — bias là số phút lệch so với UTC.

get_device_id() → StringGodot built-in

Android ID / iOS identifierForVendor. Đổi khi người dùng cài lại app (iOS) hoặc reset máy.

get_screen_size() → Vector2iGodot built-in

Kích thước màn hình vật lý (pixel).

is_native() → boolMọi nền tảng

true khi phần native đã nạp (máy Android/iOS thật). false trong editor/PC — lúc đó các hàm trả giá trị mặc định.

Hành động

get_clipboard() → StringGodot built-in

Đọc clipboard. iOS 16+ có thể hiện thông báo "đã dán từ…".

set_clipboard(text: String) → voidGodot built-in

Ghi chuỗi vào clipboard.

share_text(text: String, subject := "") → voidAndroidiOS

Mở share sheet của hệ thống. subject dùng làm tiêu đề email khi chia sẻ qua Mail/Gmail.

NativeUtils.share_text("Mình vừa đạt 1000 điểm! https://leono.game/x", "Thử thách")
show_toast(text: String) → voidAndroidiOS

Toast ngắn của Android. iOS không có toast — hàm không làm gì.

open_url(url: String) → voidGodot built-in

Mở link bằng trình duyệt hoặc app tương ứng.

open_store_page(apple_app_id := "") → voidAndroidiOS

Mở trang của chính app trên store. Android tự dùng package name (bỏ qua tham số). iOS cần App Store id dạng số (lấy trong App Store Connect → App Information → Apple ID).

NativeUtils.open_store_page("6470000000")
vibrate(duration_ms := 50) → voidGodot built-in

Rung máy. iOS dùng haptic với thời lượng cố định.

set_keep_screen_on(enabled: bool) → voidGodot built-in

Giữ màn hình không tắt, ví dụ khi đang phát video hướng dẫn.

Bất đồng bộ

Các hàm dưới đây dùng với await. Nếu không muốn await, kết nối signal tương ứng của autoload.

request_review() → voidawaitAndroidiOS

Hiện popup đánh giá trong app (Play In-App Review / StoreKit). Store tự quyết có hiện hay không và giới hạn số lần, nên hàm không trả kết quả — chỉ báo luồng đã xong.

func _on_level_10_cleared() -> void:
    await NativeUtils.request_review()
    resume_game()

Signal

review_finished()

Không thưởng người chơi vì đã đánh giá — vi phạm chính sách của cả Google lẫn Apple. Trên Android popup chỉ hiện khi app được cài từ Play (kể cả Internal testing).

get_advertising_id() → Dictionaryawaitopt-inAndroidiOS

GAID (Android) / IDFA (iOS). Trả {id, limited}; limited = true khi người dùng không cho phép theo dõi hoặc tính năng chưa bật — khi đó id rỗng. Xem hướng dẫn bên dưới.

var ad := await NativeUtils.get_advertising_id()
if not ad.limited:
    analytics.set_ad_id(ad.id)

Signal

advertising_id_received(id: String, limited: bool)

get_install_referrer() → DictionaryawaitAndroidiOS

Tham số gắn trên link Google Play mà người dùng bấm để cài app. iOS/PC trả {}.

KeyKiểuMô tả
referrerStringChuỗi gốc, ví dụ "utm_source=facebook&utm_campaign=summer"
paramsDictionaryĐã tách sẵn: {"utm_source": "facebook", …}
click_ts / install_tsintThời điểm bấm link / bắt đầu cài (giây, Unix)
errorStringChỉ có khi lỗi, ví dụ cài bằng APK

Signal

install_referrer_received(referrer: Dictionary)

Hướng dẫn: Advertising ID

GAID/IDFA kéo theo permission AD_ID trên Android và popup App Tracking Transparency trên iOS. Đây là vùng dễ bị store từ chối — đặc biệt với game cho trẻ em (Google Families policy, Apple Kids category) — nên tính năng tắt mặc định.

  1. Bật settingProject Settings → leono/nativeutils/advertising_id = true.
  2. Viết câu giải thích cho iOSios_tracking_usage_description, ví dụ "Dữ liệu được dùng để hiển thị quảng cáo phù hợp hơn với bạn." Thiếu câu này iOS luôn trả rỗng.
  3. Gọi đúng lúcTrên iOS lần gọi đầu hiện popup ATT. Gọi sau khi người chơi đã vào game (ví dụ sau tutorial), không gọi ngay lúc app vừa mở.
  4. Khai báo trên storePlay Console → Data safety: khai báo Advertising ID. App Store Connect → App Privacy: khai báo dữ liệu dùng để tracking.

Hướng dẫn: Install Referrer

Dùng để biết người chơi đến từ chiến dịch nào. Gắn tham số referrer (đã URL-encode) vào link Play Store:

https://play.google.com/store/apps/details?id=com.leono.game&referrer=utm_source%3Dfacebook%26utm_campaign%3Dsummer
const SAVE_KEY := "install_source"

func _ready() -> void:
    if Save.has(SAVE_KEY):
        return
    var ref := await NativeUtils.get_install_referrer()
    Save.set_value(SAVE_KEY, ref.get("params", {}).get("utm_source", "organic"))

Google chỉ giữ referrer 90 ngày sau khi cài, và chỉ có khi cài từ Google Play — nên đọc một lần rồi tự lưu lại.

Khác biệt giữa nền tảng

Tính năngAndroidiOS
show_toastToast hệ thốngKhông làm gì
get_install_referrerPlay Install ReferrerLuôn {}
open_store_pageTự dùng package nameCần App Store id
get_app_info().installerPackage của storeappstore / testflight / development / simulator
get_device_info().sdk_intAPI level0
vibrate(ms)Đúng thời lượngHaptic cố định
get_advertising_idKhông có popupPopup ATT lần đầu

Lịch sử phiên bản

Phiên bảnThay đổi
1.0.0Phát hành đầu tiên cho Godot 4.7: thông tin app/thiết bị, chia sẻ, đánh giá, Advertising ID (opt-in), Install Referrer.