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.
NativeUtils
Addon leono_nativeutils
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ảng | Tự động thêm khi export |
|---|---|
| Android | Permission ACCESS_NETWORK_STATE, thư viện com.google.android.play:review, com.android.installreferrer:installreferrer |
| iOS | Framework 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.
| Setting | Kiểu | Mặc định | Tác dụng |
|---|---|---|---|
advertising_id | bool | false | Bật Advertising ID. Android: thêm play-services-ads-identifier + permission AD_ID. iOS: link AdSupport + AppTrackingTransparency |
ios_tracking_usage_description | String | "" | Câu giải thích trong popup App Tracking Transparency. Bắt buộc cho iOS khi bật advertising_id |
API reference
Thông tin app & thiết bị
Thông tin bản build đang chạy.
| Key | Kiểu | Mô tả |
|---|---|---|
id | String | Package name (Android) / bundle id (iOS) |
version_name | String | Ví dụ "1.2.0" |
version_code | int | versionCode (Android) / CFBundleVersion (iOS) |
installer | String | Android: package của store, ví dụ com.android.vending, rỗng nếu cài APK. iOS: appstore · testflight · development · simulator |
| Key | Kiểu | Mô tả |
|---|---|---|
brand / manufacturer | String | iOS luôn là "Apple" |
model | String | Android: "SM-S918B". iOS: mã máy "iPhone15,2" |
os_version | String | "14" / "17.4" |
sdk_int | int | API level Android; iOS là 0 |
is_emulator | bool | Emulator Android (theo build props) / iOS Simulator |
total_ram_mb | int | RAM vật lý |
Dung lượng trống (MB). Nên kiểm tra trước khi tải gói nội dung lớn.
{level, charging} — level từ 0 đến 100, -1 nếu không đọc được (iOS Simulator).
Một trong "wifi", "cellular", "ethernet", "other", "none".
if NativeUtils.get_network_type() == "cellular":
show_download_warning()Mã ngôn ngữ hệ thống, ví dụ "vi".
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.
{bias, name} — bias là số phút lệch so với UTC.
Android ID / iOS identifierForVendor. Đổi khi người dùng cài lại app (iOS) hoặc reset máy.
Kích thước màn hình vật lý (pixel).
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
Đọc clipboard. iOS 16+ có thể hiện thông báo "đã dán từ…".
Ghi chuỗi vào clipboard.
Toast ngắn của Android. iOS không có toast — hàm không làm gì.
Mở link bằng trình duyệt hoặc app tương ứng.
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")Rung máy. iOS dùng haptic với thời lượng cố định.
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.
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).
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)
Tham số gắn trên link Google Play mà người dùng bấm để cài app. iOS/PC trả {}.
| Key | Kiểu | Mô tả |
|---|---|---|
referrer | String | Chuỗi gốc, ví dụ "utm_source=facebook&utm_campaign=summer" |
params | Dictionary | Đã tách sẵn: {"utm_source": "facebook", …} |
click_ts / install_ts | int | Thời điểm bấm link / bắt đầu cài (giây, Unix) |
error | String | Chỉ 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.
- Bật settingProject Settings → leono/nativeutils/advertising_id =
true. - Viết câu giải thích cho iOS
ios_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. - 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ở.
- 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ăng | Android | iOS |
|---|---|---|
show_toast | Toast hệ thống | Không làm gì |
get_install_referrer | Play Install Referrer | Luôn {} |
open_store_page | Tự dùng package name | Cần App Store id |
get_app_info().installer | Package của store | appstore / testflight / development / simulator |
get_device_info().sdk_int | API level | 0 |
vibrate(ms) | Đúng thời lượng | Haptic cố định |
get_advertising_id | Không có popup | Popup ATT lần đầu |
Lịch sử phiên bản
| Phiên bản | Thay đổi |
|---|---|
1.0.0 | Phá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. |