Facebook - kuimoani/defold GitHub Wiki
Facebook API ๋ iOS, Android, HTML5 ๊ฒ์์ ์ํด ๊ท๊ฒฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก Facebook์ ๊ฒ์ ์ฐ๋ ๊ธฐ๋ฅ๊ณผ ์ํธ์์ฉ ํ ์ ์๊ฒ ํด ์ค๋๋ค.
Defold Facebook API ๋ ๋ค์ํ ํ๋ซํผ์์ ๋์๊ฐ๋ Facebook API๋ฅผ iOS, Android, HTML5 (Facebook Canvas๋ฅผ ํตํด์)์์ ๋์ผํ๊ฒ ๋์ํ๊ฒ๋ ํต์ผ๋ ํจ์๋ค์ ์ ๊ณตํฉ๋๋ค. ๊ฒ์์์ Facebook ์ฐ๋์ ์์ํ๋ ค๋ฉด Facebook ๊ณ์ ์ด ํ์ํฉ๋๋ค.
Defold 1.2.92 ์์ Facebook API๊ฐ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ค๊ณ ๋์์ต๋๋ค. ์ด์ API๋ ์ฌ์ ์ด ์๋ํ๋ฏ๋ก ํฌ๋ฆฌํฐ์ปฌํ ๋ณ๊ฒฝ์ฌํญ์ ์์ต๋๋ค. ํ์ง๋ง ์์ API๋ ์๋ก์ด ์ดํ๋ฆฌ์ผ์ด์ ์๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
Registering as a Facebook developer
Facebook ์ฐ๋ ๊ฐ๋ฐ์ ํ๋ ค๋ฉด Facebook developer์ ๊ฐ์ ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์ Defold ๊ฒ์๊ณผ ์ปค๋ฎค๋์ผ์ด์ ํ ์ ์๋ Facebook ์ดํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ ์ ์์ต๋๋ค.
- Facebook for developers๋ก ์ด๋ํฉ๋๋ค.
- Facebook ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ ํฉ๋๋ค.
- ์ง์นจ์ ๋ฐ๋ผ ๊ฐ๋ฐ์ ๊ณ์ ์ ๋ฑ๋กํ๊ณ ํ์ธํฉ๋๋ค.


Creating a Facebook app
๋ค์ ๋จ๊ณ๋ Facebook application์ ์์ฑํ๋ ๊ฒ์ ๋๋ค. ๊ตฌ์์ My Apps ๋ฉ๋ด๋ฅผ ์ด์ด์ ์์ฑํ ์ฑ ๋ชฉ๋ก์ ๋ณผ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ Add a New App ์ ์ ํํฉ๋๋ค.

ํ๊ฒ ํ๋ซํผ ์ ํํ๋ฉด์ด ๋ํ๋๋ฉด basic setup ๋ฅผ ํด๋ฆญํด์ ๋ง๋ฒ์ฌ(wizards)๋ฅผ ์คํตํฉ๋๋ค.
๋ง๋ฒ์ฌ๋ฅผ ํตํด ์ ๊ณต๋๋ ๋๋ถ๋ถ์ ์ ๋ณด๋ Defold์ ๊ฐ๋ฐ๊ณผ๋ ๋ฌด๊ดํฉ๋๋ค. ํนํ ์ผ๋ฐ์ ์ผ๋ก "Info.plist" ๋๋ "AndroidManifest.xml" ์ ์ง์ ํธ์งํ ํ์๊ฐ ์์ต๋๋ค.

์ฑ ๋์ฌ๋ณด๋์์๋ ํ๋ซํผ ์ค์ ์ ์ฝ๊ฒ ์ถ๊ฐ, ์ญ์ , ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ด์ ์ฑ์ ์ด๋ฆ์ ์ง์ ํ๊ณ Display Name, Namespace, Category ๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์ด ๋ชจ๋ ๊ฐ๋ค์ ์ฑ ๋์ฌ๋ณด๋์์ ์์ ํด์ผ ํฉ๋๋ค. ์ด ๊ณผ์ ์ ๋ง์น๋ฉด Facebook์ ๊ณ ์ ํ ์ฑ ์๋ณ์๋ก ์ฑ์ ์์ฑํฉ๋๋ค. App ID ๋ ํน์ ์ฑ์ ์๋ณํ ์ดํ๋ก๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค.


Settings ํญ์ ํด๋ฆญํด์ ์ซ์๋ก ๋ App ID๋ฅผ ํ์ธํฉ๋๋ค. ์ด ์๋ณ์๋ Defold ๊ฒ์์ project settings์ ํ์ํ ๊ฐ์ ๋๋ค. ๋ถํํ๋ ์ด ์ค์ ์ ์๋ํฐ์์๋ ์จ๊ฒจ์ ธ ์์ง๋ง(๊ณง ๋ณ๊ฒฝ๋ ์์ ์), "game.project"์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญํด์ Open With โธ Text Editor ๋ฉ๋ด๋ฅผ ์ ํํด์ ์๋ณ์๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.

[facebook] ์น์ ์ App ID์ ํด๋นํ๋ appid=456788687846098 ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ซ์๊ฐ ๋ง๋์ง ํ์ธํ๊ณ ํ์ผ์ ์ ์ฅํฉ๋๋ค.

์ด์ , Facebook ์ฑ ํ์ด์ง์ Settings ํญ์ผ๋ก ๋์์์ + Add Platform ๋ฅผ ํด๋ฆญํด์ ์ฑ์ ์ ํ๋ซํผ์ ์ถ๊ฐํฉ๋๋ค. ๊ฐ ํ๋ซํผ ๋ณ๋ก ์ฑ์์ผํ๋ ์ค์ ํญ๋ชฉ๋ค์ด ์์ต๋๋ค.

iOS
iOS์ ๊ฒฝ์ฐ "game.project"์ ์ค์ ํ bundle_identifier ๋ฅผ Bundle ID์ ์ง์ ํด์ผ ํฉ๋๋ค.

Android
Android์ ๊ฒฝ์ฐ Google Play Package Name์ "game.project"์์ ์ค์ ํ package ์๋ณ์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ํ ์ธ์ฆ์์ ํด์ฌ๊ฐ์ ์์ฑํด์ Key Hashes ํ๋์ ์ ๋ ฅํด์ผ ํฉ๋๋ค. openssl ์ ์ฌ์ฉํ์ฌ "certificate.pem"์์ ํด์ฌ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
$ cat certificate.pem | openssl x509 -outform der | openssl sha1 -binary | openssl base64
(์๋ช ํ์ผ์ ์์ฑํ๋ ์์ธํ ๋ฐฉ๋ฒ์ Android ๋งค๋ด์ผ์ Creating certificates and keys์์ ์ฐธ๊ณ ๋ฐ๋๋๋ค.)

Facebook Canvas
HTML5 ๊ฒ์์ ๊ฒฝ์ฐ์๋ ์์ ๊ณผ์ ์ด ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค. Facebook์ ์ด๋๊ฐ๋ก๋ถํฐ ๊ฒ์ ์ปจํ ์ธ ๋ฅผ ์ก์ธ์ค ํ ์ ์๊ฒ ํด์ผํฉ๋๋ค. ์ฌ๊ธฐ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.

-
Facebook์ Simple Application Hosting ๋ฅผ ์ฌ์ฉํฉ๋๋ค. Yes๋ฅผ ํด๋ฆญํด์ ํ์ด์ค๋ถ์ด ๊ด๋ฆฌํ๋ ํธ์คํ ์ ์ ํํฉ๋๋ค. uploaded assets ๋ฅผ ์ ํํด์ hosted asset manager๋ฅผ ์ฝ๋๋ค.
"HTML5 Bundle"์ ์ ํํฉ๋๋ค:
HTML5 bundle์ .7z ๋๋ .zip ์ผ๋ก ์์ถํด์ Facebook์ ์
๋ก๋ ํฉ๋๋ค. Push to production ๋ฅผ ํด๋ฆญํด์ ๊ฒ์ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค. -
Facebook ํธ์คํ ์ ๋์์ผ๋ก๋ HTTPS ๋ฅผ ํตํด ๊ฒ์์ ์๋น์คํ๋ ํน์ ์๋ฒ๋ก HTML5 bundle ์ ์ ๋ก๋ ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. Secure Canvas URL๋ฅผ ๊ฒ์์ URL๋ก ์ค์ ํฉ๋๋ค.
์ด์ , Canvas Page๋ก ์ ๊ณต๋ Facebook URL ์ ํตํ์ฌ ๊ฒ์์ด ์๋ํ๊ฒ ๋ฉ๋๋ค.
Testing the setup
๋ค์์ ๊ธฐ๋ณธ์ ์ธ ํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
- ์ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด ์ ์คํฌ๋ฆฝํธ ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํจ
- ์คํฌ๋ฆฝํธ ํ์ผ์ ์๋ ์ฝ๋๋ฅผ ์ ๋ ฅํจ
local function get_me_callback(self, id, response)
-- response ํ
์ด๋ธ์ ๋ชจ๋ ์๋ต ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๊ณ ์์
pprint(response)
end
local function fb_login(self, data)
if data.status == facebook.STATE_OPEN then
-- ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด HTTP graph API๋ฅผ ํตํด "me" ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ณด์
local token = facebook.access_token()
local url = "https://graph.facebook.com/me/?access_token=" .. token
http.request(url, "GET", get_me_callback)
elseif data.status == facebook.STATE_CLOSED_LOGIN_FAILED then
-- ๋ก๊ทธ์ธ ์คํจ์ ๋ญ๊ฐ ์ฒ๋ฆฌํ์...
end
if data.error then
-- ์๋ฌ ๋ฐ์
else
-- ์๋ฌ ์์
end
end
function init(self)
-- ์ฝ๊ธฐ ๊ถํ์ผ๋ก ๋ก๊ทธ์ธํ๊ธฐ
local permissions = { "public_profile", "email" }
facebook.login_with_read_permissions(permissions, fb_login)
end
์ด ๊ฐ๋จํ ํ ์คํธ๋ฅผ ์คํํ๋ฉด ์ฝ์์ฐฝ์ ์๋์ ๊ฐ์ ๋ด์ฉ์ด ํ์๋ฉ๋๋ค.
DEBUG:SCRIPT:
{
status = 200,
headers = {
connection = keep-alive,
date = Fri, 04 Nov 2016 13:54:33 GMT,
etag = "0725a4f703fe6af27da183cfec0bb22637e331e0",
access-control-allow-origin = *,
content-length = 53,
expires = Sat, 01 Jan 2000 00:00:00 GMT,
content-type = text/javascript; charset=UTF-8,
x-fb-debug = Pr1qUssb8Xa3x3r1t913hHMdefh69DSYYV5vcxeOB7O33mcfShIw+r7BoLpn147I2wzLF2CZRTpnR3/VYOtFpA==,
facebook-api-version = v2.5,
cache-control = private, no-cache, no-store, must-revalidate,
pragma = no-cache,
x-fb-trace-id = F03S5dtsdaS,
x-fb-rev = 2664414,
}
response = {"name":"Max de Fold ","id":"14159265358979323"},
}
- ์ ์ฒด Defold Facebook API ๋ Facebook reference documentation ์ ๋ฌธ์ํ ๋์ด ์์ต๋๋ค.
- Facebook Graph API ๋ https://developers.facebook.com/docs/graph-api ์ ๋ฌธ์ํ ๋์ด ์์ต๋๋ค.
Development caveats
๊ฐ๋ฐ์ค์๋ dev application์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค. ๋ถํํ๋ Facebook API๋ ๋ฒ๋ค๋ง ๋ "Info.plist" ํ์ผ์ด ๊ตฌ์ฑ๋์ด์ผ ํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ dev ์ฑ์์ ์์ง ๋์ํ์ง ์์ต๋๋ค. ํ์ง๋ง ๋ชจ๋ ๋๋ฒ๊ทธ ๋ฒ๋ค์ dev ์ฑ์ผ๋ก ๋์ํ๋ฏ๋ก, ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ผ๋ก๋ ์ ์ ํ Facebook ํ๋ก์ ํธ ์ค์ ์ผ๋ก ๊ฒ์์ ๋น๋ํ๊ณ , ์ฅ์น์ ๋ฃ๊ณ , ์คํ์ค์ธ ๊ฒ์์ ์ฐ๊ฒฐํ๊ณ , ํ์์ ์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์๋ํฐ์์ ์คํธ๋ฆผํ๋ฉด ๋ฉ๋๋ค.