added firebase and rudimentary leaderboard support
This commit is contained in:
109
addons/godot-firebase/dynamiclinks/dynamiclinks.gd
Normal file
109
addons/godot-firebase/dynamiclinks/dynamiclinks.gd
Normal file
@@ -0,0 +1,109 @@
|
||||
## @meta-authors TODO
|
||||
## @meta-authors TODO
|
||||
## @meta-version 1.1
|
||||
## The dynamic links API for Firebase
|
||||
## Documentation TODO.
|
||||
@tool
|
||||
class_name FirebaseDynamicLinks
|
||||
extends Node
|
||||
|
||||
signal dynamic_link_generated(link_result)
|
||||
signal generate_dynamic_link_error(error)
|
||||
|
||||
const _AUTHORIZATION_HEADER : String = "Authorization: Bearer "
|
||||
const _API_VERSION : String = "v1"
|
||||
|
||||
var request : int = -1
|
||||
|
||||
var _base_url : String = ""
|
||||
|
||||
var _config : Dictionary = {}
|
||||
|
||||
var _auth : Dictionary
|
||||
var _request_list_node : HTTPRequest
|
||||
|
||||
var _headers : PackedStringArray = []
|
||||
|
||||
enum Requests {
|
||||
NONE = -1,
|
||||
GENERATE
|
||||
}
|
||||
|
||||
func _set_config(config_json : Dictionary) -> void:
|
||||
_config = config_json
|
||||
_request_list_node = HTTPRequest.new()
|
||||
Utilities.fix_http_request(_request_list_node)
|
||||
_request_list_node.request_completed.connect(_on_request_completed)
|
||||
add_child(_request_list_node)
|
||||
_check_emulating()
|
||||
|
||||
|
||||
func _check_emulating() -> void :
|
||||
## Check emulating
|
||||
if not Firebase.emulating:
|
||||
_base_url = "https://firebasedynamiclinks.googleapis.com/v1/shortLinks?key=%s"
|
||||
_base_url %= _config.apiKey
|
||||
else:
|
||||
var port : String = _config.emulators.ports.dynamicLinks
|
||||
if port == "":
|
||||
Firebase._printerr("You are in 'emulated' mode, but the port for Dynamic Links has not been configured.")
|
||||
else:
|
||||
_base_url = "http://localhost:{port}/{version}/".format({ version = _API_VERSION, port = port })
|
||||
|
||||
|
||||
var _link_request_body : Dictionary = {
|
||||
"dynamicLinkInfo": {
|
||||
"domainUriPrefix": "",
|
||||
"link": "",
|
||||
"androidInfo": {
|
||||
"androidPackageName": ""
|
||||
},
|
||||
"iosInfo": {
|
||||
"iosBundleId": ""
|
||||
}
|
||||
},
|
||||
"suffix": {
|
||||
"option": ""
|
||||
}
|
||||
}
|
||||
|
||||
## @args log_link, APN, IBI, is_unguessable
|
||||
## This function is used to generate a dynamic link using the Firebase REST API
|
||||
## It will return a JSON with the shortened link
|
||||
func generate_dynamic_link(long_link : String, APN : String, IBI : String, is_unguessable : bool) -> void:
|
||||
if not _config.domainUriPrefix or _config.domainUriPrefix == "":
|
||||
generate_dynamic_link_error.emit("Error: Missing domainUriPrefix in config file. Parameter is required.")
|
||||
Firebase._printerr("Error: Missing domainUriPrefix in config file. Parameter is required.")
|
||||
return
|
||||
|
||||
request = Requests.GENERATE
|
||||
_link_request_body.dynamicLinkInfo.domainUriPrefix = _config.domainUriPrefix
|
||||
_link_request_body.dynamicLinkInfo.link = long_link
|
||||
_link_request_body.dynamicLinkInfo.androidInfo.androidPackageName = APN
|
||||
_link_request_body.dynamicLinkInfo.iosInfo.iosBundleId = IBI
|
||||
if is_unguessable:
|
||||
_link_request_body.suffix.option = "UNGUESSABLE"
|
||||
else:
|
||||
_link_request_body.suffix.option = "SHORT"
|
||||
_request_list_node.request(_base_url, _headers, HTTPClient.METHOD_POST, JSON.stringify(_link_request_body))
|
||||
|
||||
func _on_request_completed(result : int, response_code : int, headers : PackedStringArray, body : PackedByteArray) -> void:
|
||||
var json = JSON.new()
|
||||
var json_parse_result = json.parse(body.get_string_from_utf8())
|
||||
if json_parse_result == OK:
|
||||
var result_body = json.data.result # Check this
|
||||
dynamic_link_generated.emit(result_body.shortLink)
|
||||
else:
|
||||
generate_dynamic_link_error.emit(json.get_error_message())
|
||||
# This used to return immediately when above, but it should still clear the request, so removing it
|
||||
|
||||
request = Requests.NONE
|
||||
|
||||
func _on_FirebaseAuth_login_succeeded(auth_result : Dictionary) -> void:
|
||||
_auth = auth_result
|
||||
|
||||
func _on_FirebaseAuth_token_refresh_succeeded(auth_result : Dictionary) -> void:
|
||||
_auth = auth_result
|
||||
|
||||
func _on_FirebaseAuth_logout() -> void:
|
||||
_auth = {}
|
||||
1
addons/godot-firebase/dynamiclinks/dynamiclinks.gd.uid
Normal file
1
addons/godot-firebase/dynamiclinks/dynamiclinks.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://dgbj7nixmfyrs
|
||||
Reference in New Issue
Block a user