์๋
ํ์ธ์,
์ด ํ๋ก์ ํธ์ ํ๋ฅญํ ์์
์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
์ด์จ ํ๋ก์ ํธ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋จผ์ config.xml์ ๋ฌธ์์ด์ ์ถ๊ฐํฉ๋๋ค.
<plugin name="cordova-plugin-firebase" spec="https://github.com/arnesson/cordova-plugin-firebase" />
๋์งธ, google-services.json (firebase ์น ์ฝ์์์ ๊ฐ์ ธ์ด)์ ๋ฃจํธ ๋๋ ํ ๋ฆฌ์ ๋ฃ์ต๋๋ค.
๋ด ๋น๋๋ฅผ ์คํํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
$ cordova run android
Running command: /home/user/android-app/App/hooks/after_prepare/010_add_platform_class.js /home/user/android-app/App
add to body class: platform-android
**Discovered plugin "cordova-plugin-firebase" in config.xml. Adding it to the project**
Fetching plugin "https://github.com/arnesson/cordova-plugin-firebase" via git clone
Repository "https://github.com/arnesson/cordova-plugin-firebase" checked out to git ref "master".
Installing "cordova-plugin-firebase" for android
ANDROID_HOME=/home/user/Android/Sdk/
JAVA_HOME=/opt/java/jdk1.8.0_92
No target specified, deploying to device 'F9AZCY31J032'.
:preBuild UP-TO-DATE
ํ์ง๋ง ๋ ๋ฒ์งธ ๋น๋๋ ํญ์ ์คํจํฉ๋๋ค...
$ cordova run android
Running command: /home/user/android-app/App/hooks/after_prepare/010_add_platform_class.js /home/user/android-app/App
add to body class: platform-android
Error: Invalid data, chunk must be a string or buffer, not object
cordova plugin add https://github.com/arnesson/cordova-plugin-firebase.git --save
ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋ ค๊ณ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ ๋น๋๋ Error: Invalid data, chunk must be a string or buffer, not object
์ถฉ๋ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒซ ๋ฒ์งธ ๋น๋๋ก Android ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ํ ๋ ์๋ ์ฝ๋๊ฐ ์๋ํ์ง ์์ต๋๋ค.
angular.module('app', ['ionic', 'app.controllers', 'app.routes', 'app.services', 'app.directives', 'firebase'])
.run(function($ionicPlatform) {
$ionicPlatform.ready(function() {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
cordova.plugins.Keyboard.disableScroll(true);
}
if (window.StatusBar) {
// org.apache.cordova.statusbar required
StatusBar.styleDefault();
}
window.FirebasePlugin.getInstanceId(function(token) {
// save this server-side and use it to push notifications to this device
console.log("Token", token);
}, function(error) {
console.error(error);
});
});
})
์ด ์ฝ๋๋ ์ฝ์์ ["Token", "null"]์ ๋ฐํํฉ๋๋ค.
๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
platform/andoid/res/values/strings.xml์ ์์์๋ ์ด์ํ ๊ฐ์ด ์์ต๋๊น?
๋น๋ํ๊ธฐ ์ ์ cordova prepare android๋ฅผ ์คํํด ๋ณด์ญ์์ค(๊ทธ๊ฒ ์์ด๋ ์๋ํด์ผ ํจ).
๋์ผํ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์ ์์ต๋๋ค. string.xml์๋ ๋ค์์ด ์์ต๋๋ค.
<string name="google_app_id">727247059290</string>
<string name="google_app_id">@string/google_app_id</string>
<string name="google_api_key">@string/google_api_key</string>
string.xml์์ google_app_id
๋ฅผ ์ ๊ฑฐํ๊ณ ๋ค์ ์๋ํ์ญ์์ค. ๋๋ ์ ๊ฑฐํ๊ณ ๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์ผํ๊ณ ์์ต๋๋ค.
iOS๋ ์ด๋ป์ต๋๊น? ๋น์ ์ ์ด๋ค ์๊ฐ์ด ์์ต๋๊น?
์๋์. iOS์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๋ค. iOS ํ๋ก์ ํธ์ GoogleService-Info.plist ํ์ผ์ ์ถ๊ฐํ๊ณ Pod๋ฅผ ์ค์นํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์ Android์์ ์๋ํ๊ธฐ ์์ํ์ต๋๊น?
์๋์, ์๋ฎฌ๋ ์ดํธํ๋ ค๊ณ ํ ๋ ์ค๋ฅ: ์๋ชป๋ ๋ฐ์ดํฐ๊ฐ ํ์๋ฉ๋๋ค. ์ฝ๋ฅด๋๋ฐ ์ค๋น ํํฌ๊ฐ ํ์ผ์ ๋ค์ ๋ณ๊ฒฝํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋๋ ios์์ ์๋ํ๋๋ก ๋ง๋๋ ๋ฐ ๋ ๊ด์ฌ์ด ์์ต๋๋ค. ios์์ ๋น๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค: https://github.com/arnesson/cordova-plugin-firebase/issues/11
@raducostea - APN(Apple ํธ์ ์๋ฆผ)์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ๋ฌ๊ทธ์ธ ๋งํฌ๋ https://github.com/phonegap-build/PushPlugin์ ๋๋ค. iOS์์ ๋งค์ฐ ์ ํํ๊ฒ ์๋ํฉ๋๋ค.
@ dhruv270 ๋๋ ์ด๋ฏธ ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ถ์ ๋ถ๋ถ์ ๋ํ ์ด ํ๋ฌ๊ทธ์ธ์ด ์ด๋ฒคํธ๋ฅผ ๊ธฐ๋กํ๊ณ Google ๋ถ์ ๋ด๋ถ์ ์ถ๊ฐํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ค๋ฅ: google-services.json ๋ฐ googleService-info.plist ๊ฐ ํ๋ซํผ ํด๋์ ๋ณต์ฌ๋์ด ์๋ชป๋ ๋ฐ์ดํฐ๊ฐ ๋ํ๋ฌ์ต๋๋ค. ํ๋ซํผ ํด๋์ json, plist๊ฐ ์กด์ฌํ์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ํ์๋ฉ๋๋ค.
ํ๋ซํผ ํด๋์ json, plist ํ์ผ์ ์ถ๊ฐํ์ฌ ์์ ํ์ต๋๋ค. ๋ด ํ์ฐฎ์ ์์ด ์ค๋ ฅ์ ์ฃ์กํ๋ค๋ ๋ง์์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค
์, Firebase ์ฝ์์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ํจํค์ง ์ด๋ฆ/๋ฒ๋ค ID๋ฅผ ์ถ๊ฐํ์ฌ ํด๋น ํ๋ก์ ํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ถ๊ฐํฉ๋๋ค. Android์ ๊ฒฝ์ฐ google-services.json, iOS์ ๊ฒฝ์ฐ GoogleService-Info.plist๊ฐ ์ ๊ณต๋ฉ๋๋ค. ํ๋ก์ ํธ์ ์ถ๊ฐํด์ผ ํ๋ ํ์ผ์ ๋๋ค.
์๋ฅผ ๋ค์ด ํ๋ซํผ์ด๋ www๊ฐ ์๋ โโconfig.xml ๋ฑ๊ณผ ํจ๊ป ํ๋ก์ ํธ์ ๋ฃจํธ์ ํ์ผ์ ๋ฃ์ด์ผ ํฉ๋๋ค.
@raducostea @dhruv270 APN ๋ฐ ํธ์์ ๊ดํด์๋ ์ด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. PushPlugin์ ๊ฒฐ๊ตญ Firebase FCM์ผ๋ก ์ ํ๋ฉ๋๋ค(GCM์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์). FCM์ IOS์ฉ APN์ ์ฌ์ฉํ๋ฏ๋ก ๋์ผํ์ง๋ง ๋ชจ๋ ํ๋ซํผ์์ ๊ณตํต ์ธํฐํ์ด์ค์ ์ด์ ์ ์ป์ต๋๋ค.
์ด๋ฏธ ๊ทธ๋ ๊ฒ ํ์ง๋ง ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. https://github.com/arnesson/cordova-plugin-firebase/issues/11 ํ์ธ
string.xml์ ์์์๋ ์ด์ํ ๊ฐ์ด ์์ต๋๋ค.
๋๋ cordova-plugin-firebase๋ฅผ ๋ค์ ์ค์นํ๊ณ "cordova prepare"๋ฅผ ๋ง๋ค์์ต๋๋ค. ๊ทธ ํ ๋๋ strings.xml์์ ์๋ก์ด ๊ฐ์ ๋ณด์์ต๋๋ค.
<string name="google_app_id">@string/google_app_id</string>
<string name="google_api_key">@string/google_api_key</string>
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ค์ ๋น๋ํ ๋:
์ค๋ฅ: ์๋ชป๋ ๋ฐ์ดํฐ, ์ฒญํฌ๋ ๊ฐ์ฒด๊ฐ ์๋ ๋ฌธ์์ด ๋๋ ๋ฒํผ์ฌ์ผ ํฉ๋๋ค.
iOS์ Android ํ๋ซํผ์ ๋ชจ๋ ์ถ๊ฐํ์ต๋๊น?
Android๋ฅผ ๋น๋ํ๋ฉด์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
**์์์น ๋ชปํ ์ต์์ ์์ธ:
com.android.dex.DexException: ์ฌ๋ฌ dex ํ์ผ์ด Lcom/google/firebase/FirebaseException์ ์ ์ํฉ๋๋ค.
com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:579)
com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:535)
com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:517)
com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:164)
com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:504)
com.android.dx.command.dexer.Main.runMonoDex(Main.java:334)
com.android.dx.command.dexer.Main.run(Main.java:277)
com.android.dx.command.dexer.Main.main(Main.java:245)
com.android.dx.command.Main.main(Main.java:106)
์คํจํ**
@neosekar ์ ๊ฐ์ ๋ฌธ์ ๊ฐ
ํธ์งํ๋ค:
์ธํฐ๋ท์์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฐพ์์ต๋๋ค.
ํฐ ์ข ์์ฑ์ผ๋ก ์ธํด ๋ฉ์๋ ์ ์ ํ์ ๋๋ฌํ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ ์ํด ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
ํธ์ง 2:
๋ค์์ ์ํํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ด๋ฏธ ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์์ 'com.google.gms.google-services'๋ฅผ ์ค์นํ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๋ฌ dex ํ์ผ๊ณผ ๊ด๋ จํ์ฌ Lcom/google/firebase/FirebaseException์ ์ ์ํฉ๋๋ค.
์ด๊ฒ์ ์ค๋ณต ์ข
์์ฑ, ์๋ง๋ com.google์ ์ฌ์ฉํ๋ ๋ค๋ฅธ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. gms:google-services , Firebase SDK ๋๋ ๊ทธ ์ผ๋ถ. ์ง์ ํ
์คํธํ์ง๋ ์์์ง๋ง ํ๋ก์ ํธ์ ์ฌ์ฉ๋ ๋ชจ๋ ์ข
์์ฑ์ ๋์ดํ๊ณ ์ค๋ณต ํญ๋ชฉ์ ์ฐพ์ ์ ์์ด์ผ ํฉ๋๋ค.
http://stackoverflow.com/questions/30648172/gradle-library-duplicates-in-dependencies
iOS ํ๋ซํผ์ด ์์ ๋ GoogleService-Info.plist๊ฐ ์์ผ๋ฉด "๋ ๋ฒ์งธ ๋น๋ ์ค๋ฅ"๊ฐ ๋ฐ์ํฉ๋๋ค. ํ๋ซํผ/ios๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง GoogleService-Info.plist๋ฅผ ๋ณต์ฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค....
์์ง ํจ์น๋ฅผ ํ ์คํธํ์ง ์์์ง๋ง After_prepare.js๋ฅผ ํจ์นํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ํจ๊ณผ๊ฐ ์์ผ๋ฉด ํฌ์คํ ํ๊ฒ ์ต๋๋ค
@st8st8 ๋ฌธ์ ๋ ์ด๋ฏธ ์์ ๋์์ต๋๋ค(git ๋ฒ์ ์์)
...
if(fileExists("GoogleService-Info.plist") && directoryExists("platforms/ios/")){
...
๋ฐฉ๊ธ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ณ ์ ์ ํ GoogleService-Info.plist ๋ฐ google-services.json ํ์ผ์ ๋ชจ๋ ๋ค์ ๋ค์ด๋ก๋ํ๋๋ฐ ์ ๋๋ก ์๋ํ์ต๋๋ค.
๋๋ ionic๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ง๋ฉดํ๊ณ ์์ต๋๋ค. ํ๋ซํผ๊ณผ ํ๋ฌ๊ทธ์ธ์ ์ ๊ฑฐํ๊ณ ํ๋ซํผ๊ณผ ํ๋ฌ๊ทธ์ธ์ ๋ค์ ์ถ๊ฐํ์ฌ ์์ ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ๋ค์ ์์ ํ ์ ์์
๋๋ค.
ionic 2์ ์ด ๋ฌธ์ ์ ๋ํด ์ด ํํ ๋ฆฌ์ผ์ ์์ฑํฉ๋๋ค.
cordova-plugin-firebase ์ฌ์ค์น๊ฐ ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.