React-native-onesignal: onOpened/onReceived ์ด๋ฒคํŠธ๊ฐ€ Android์—์„œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2018๋…„ 07์›” 09์ผ  ยท  35์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: OneSignal/react-native-onesignal

์„ค๋ช…:
์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„. Android์—์„œ onOpened/onReceived ์ด๋ฒคํŠธ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ์‹ค์ œ ์žฅ์น˜์˜ ๋™์ž‘์€ ๋‹ค๋ฅด์ง€๋งŒ ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์ •ํ™•ํ•œ ํ‘ธ์‹œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ:

  1. ์ „๊ฒฝ - onReceived ์ด๋ฒคํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  onOpened๋Š” ํ‘ธ์‹œ๋ฅผ ํƒญํ•  ๋•Œ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์ •ํ™•ํ•จ).
  2. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ™œ์„ฑ - ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ(์ž˜๋ชป๋จ)
  3. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋น„ํ™œ์„ฑ(์•ฑ์ด ๋‹ซํž˜) - onOpened๋Š” ํ‘ธ์‹œ๋ฅผ ํƒญํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์ •ํ™•ํ•จ).

์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ:

  1. ์ „๊ฒฝ - ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ(์ž˜๋ชป๋จ)
  2. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ™œ์„ฑ - ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ(์ž˜๋ชป๋จ)
  3. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋น„ํ™œ์„ฑ(์•ฑ์ด ๋‹ซํž˜) - onOpened๋Š” ํ‘ธ์‹œ๋ฅผ ํƒญํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค(์ •ํ™•ํ•จ).

ํ™˜๊ฒฝ

  1. react-native-onesignal: "3.2.4"
  2. ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ: "0.50.4"
  3. compileSdkVersion: "27"
  4. buildToolsVersion: "27.0.3"
  5. gradle: "4.1"

๋ฌธ์ œ ์žฌํ˜„ ๋‹จ๊ณ„:
ํšŒ์‚ฌ์˜ ์‹ ๋ขฐ ์ •์ฑ…์œผ๋กœ ์ธํ•ด ์žฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€:
android/build.gradle

```// ๋ชจ๋“  ํ•˜์œ„ ํ”„๋กœ์ ํŠธ/๋ชจ๋“ˆ์— ๊ณตํ†ต์ ์ธ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์œ„ ๋นŒ๋“œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ {
์ €์žฅ์†Œ {
์ œ์ด์„ผํ„ฐ()
Google()
}
์ข…์†์„ฑ {
ํด๋ž˜์Šค ๊ฒฝ๋กœ 'com.android.tools. ๋นŒ๋“œ:๊ทธ๋ผ๋“ค :3.0.1'

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}

}

๋ชจ๋“  ํ”„๋กœ์ ํŠธ {
์ €์žฅ์†Œ {
maven { url " https://jitpack.io " } // MPAndroidChart์— ์‚ฌ์šฉ๋จ
๋ฉ”์ด๋ธ๋กœ์ปฌ()
Google()
์ œ์ด์„ผํ„ฐ()
๋ฉ”์ด๋ธ {
// ๋ชจ๋“  React Native(JS, Obj-C ์†Œ์Šค, Android ๋ฐ”์ด๋„ˆ๋ฆฌ)๋Š” npm์—์„œ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.
URL "$rootDir/../node_modules/react-native/android"
}
}
}

`android/app/build.gradle`

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: 'com.onesignal.androidsdk.onesignal-gradle-plugin'
ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: "com.android.application"

com.android.build.OutputFile ๊ฐ€์ ธ์˜ค๊ธฐ

๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ {
์ €์žฅ์†Œ {
maven { url ' https://plugins.gradle.org/m2/ ' } // Gradle ํ”Œ๋Ÿฌ๊ทธ์ธ ํฌํ„ธ
}
์ข…์†์„ฑ {
ํด๋ž˜์Šค ๊ฒฝ๋กœ 'gradle.plugin.com. onesignal:onesignal-gradle-plugin :[0.10.0, 0.99.99]'
}
}

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์šฉ: 'com.onesignal.androidsdk.onesignal-gradle-plugin'

/**

  • react.gradle ํŒŒ์ผ์€ ๊ฐ ๋นŒ๋“œ ๋ณ€ํ˜•์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: bundleDebugJsAndAssets
  • ๋ฐ bundleReleaseJsAndAssets).
  • ์ด๋“ค์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Android ๋นŒ๋“œ ์ค‘์— ์˜ฌ๋ฐ”๋ฅธ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ react-native bundle ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ์ฃผ๊ธฐ. ๊ธฐ๋ณธ์ ์œผ๋กœ bundleDebugJsAndAssets๋Š” ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ/๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ๊ฐœ๋ฐœ ์„œ๋ฒ„์—์„œ ์ง์ ‘ ๋ฒˆ๋“ค. ์•„๋ž˜์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ตฌ์„ฑ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋“ค์˜ ๊ธฐ๋ณธ๊ฐ’. ๊ตฌ์„ฑ ๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ๋ธ”๋ก ์•ž์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • apply from: "../../node_modules/react-native/react.gradle" ๋ผ์ธ.
    *
  • project.ext.react = [
  • // JS ๋ฒˆ๋“ค์„ ํฌํ•จํ•˜๋Š” ์ƒ์„ฑ๋œ ์ž์‚ฐ ํŒŒ์ผ์˜ ์ด๋ฆ„
  • ๋ฒˆ๋“ค ์ž์‚ฐ ์ด๋ฆ„: "index.android.bundle",
    *
  • // ๋ฒˆ๋“ค ์ƒ์„ฑ์„ ์œ„ํ•œ ์—”ํŠธ๋ฆฌ ํŒŒ์ผ
  • ํ•ญ๋ชฉ ํŒŒ์ผ: "index.android.js",
    *
  • // ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€
  • ๋ฒˆ๋“ค ์ธ ๋””๋ฒ„๊ทธ: ๊ฑฐ์ง“,
    *
  • // ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€
  • BundleInRelease: ์ฐธ,
    *
  • // ๋‹ค๋ฅธ ๋นŒ๋“œ ๋ณ€ํ˜•์—์„œ JS์™€ ์ž์‚ฐ์„ ๋ฒˆ๋“คํ• ์ง€ ์—ฌ๋ถ€(๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ).
  • // http://tools.android.com/tech-docs/new-build-system/user-guide#TOC -Build-Variants ์ฐธ์กฐ
  • // ๊ตฌ์„ฑ ์†์„ฑ์€ ๋‹ค์Œ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • // 'bundleIn${productFlavor}${๋นŒ๋“œ ์œ ํ˜•}'
  • // '๋ฒˆ๋“ค์ธ${๋นŒ๋“œํƒ€์ž…}'
  • // bundleInFreeDebug: ์ฐธ,
  • // bundleInPaidRelease: ์ฐธ,
  • // ๋ฒˆ๋“ค์ธ๋ฒ ํƒ€: ์ฐธ,
    *
  • // ์‚ฌ์šฉ์ž ์ •์˜ ๋นŒ๋“œ ๋ณ€ํ˜•์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ• ์ง€ ์—ฌ๋ถ€(๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆด๋ฆฌ์Šค์—์„œ๋งŒ ๋น„ํ™œ์„ฑํ™”๋จ)
  • // ์˜ˆ: ์Šคํ…Œ์ด์ง• ๋นŒ๋“œ ์œ ํ˜•์—์„œ ๊ฐœ๋ฐœ ๋ชจ๋“œ ๋น„ํ™œ์„ฑํ™”(๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ)
  • devDisabledInStaging: ์ฐธ,
  • // ๊ตฌ์„ฑ ์†์„ฑ์€ ๋‹ค์Œ ํ˜•์‹์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • // 'devDisabledIn${productFlavor}${๋นŒ๋“œ ์œ ํ˜•}'
  • // 'devDisabledIn${๋นŒ๋“œ ์œ ํ˜•}'
    *
  • // ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ, ์ฆ‰ "package.json"์ด ์žˆ๋Š” ์œ„์น˜
  • ๋ฃจํŠธ: "../../",
    *
  • // ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ JS ๋ฒˆ๋“ค ์ž์‚ฐ์„ ๋„ฃ์„ ์œ„์น˜
  • jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
    *
  • // ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JS ๋ฒˆ๋“ค ์ž์‚ฐ์„ ๋„ฃ์„ ์œ„์น˜
  • jsBundleDirRelease: "$buildDir/intermediates/assets/release",
    *
  • // ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ฃ์„ ์œ„์น˜ / React Native ์ž์‚ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ
  • // require('./image.png')), ๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ
  • resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
    *
  • // ๋“œ๋กœ์–ด๋ธ” ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ฃ์„ ์œ„์น˜ / React Native ์ž์‚ฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ž์‚ฐ
  • // require('./image.png')), ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ
  • resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
    *
  • // JS ํŒŒ์ผ์ด๋‚˜ ์ž์‚ฐ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ gradle ์ž‘์—…์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜๋ฏธ
  • // ์ž‘์—…์ด ์ตœ๋Œ€์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด android/ ๋˜๋Š” ios/์˜ ํŒŒ์ผ์„ ํ™•์ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • // ๋ฐ์ดํŠธ; ์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ๋กœ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์€ ๋‹ค๋ฅธ ํด๋”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ(gradle
  • // ์ „์ฒด ํŠธ๋ฆฌ๋ฅผ ์ธ๋ฑ์‹ฑํ•จ), ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” android/์— JS ํŒŒ์ผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
  • // ์˜ˆ๋ฅผ ๋“ค์–ด ์—ฌ๊ธฐ์—์„œ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž…๋ ฅ ์ œ์™ธ: ["์•ˆ๋“œ๋กœ์ด๋“œ/ ", "ios/ "],
    *
  • // ํ˜ธ์ถœ๋˜๋Š” ๋…ธ๋“œ์™€ ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  • nodeExecutableAndArgs: ["๋…ธ๋“œ"],
    *
  • // ํŒจํ‚ค์ €์— ์ถ”๊ฐ€ ์ธ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • extraPackagerArgs: []
  • ]
    */

project.ext.react = [
cliPath: "node_modules/haul/bin/cli.js"
]

์ ์šฉ: "../../node_modules/react-native/react.gradle"

/**

  • ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ APK๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์ด๊ฒƒ์„ true๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

    • ARM ๊ธฐ๊ธฐ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” APK


    • x86 ๊ธฐ๊ธฐ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” APK

  • ์žฅ์ ์€ APK์˜ ํฌ๊ธฐ๊ฐ€ ์•ฝ 4MB๋กœ ์ค„์–ด๋“ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋ชจ๋“  APK๋ฅผ Play ์Šคํ† ์–ด์— ์—…๋กœ๋“œํ•˜๋ฉด ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ์žฅ์น˜์˜ CPU ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    */
    def enableSeparateBuildPerCPUArchitecture = ๊ฑฐ์ง“

/**

  • Proguard๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์—์„œ Java ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์ถ•์†Œํ•ฉ๋‹ˆ๋‹ค.
    */
    def enableProguardInReleaseBuilds = ๊ฑฐ์ง“

์•ˆ๋“œ๋กœ์ด๋“œ {
compileSdk๋ฒ„์ „ 27
buildTools๋ฒ„์ „ "27.0.3"

defaultConfig {
    applicationId "com.binomysteryshopper"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
    vectorDrawables.useSupportLibrary = true
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}
signingConfigs {
      release {
          if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
              storeFile file(MYAPP_RELEASE_STORE_FILE)
              storePassword MYAPP_RELEASE_STORE_PASSWORD
              keyAlias MYAPP_RELEASE_KEY_ALIAS
              keyPassword MYAPP_RELEASE_KEY_PASSWORD
          }
      }
  }
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86"
    }
}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release
    }
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
        def versionCodes = ["armeabi-v7a":1, "x86":2]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}

}

์ข…์†์„ฑ {
์ปดํŒŒ์ผ (project(':react-native-onesignal')){
์ œ์™ธ ๊ทธ๋ฃน: "com.google.android.gms"
}
์ปดํŒŒ์ผ("com.google.android.gms:play-services-base:12.0.1") {
ํž˜ = ์ฐธ;
}
์ปดํŒŒ์ผ ํ”„๋กœ์ ํŠธ(':๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šด๋“œ')
์ปดํŒŒ์ผ ํ”„๋กœ์ ํŠธ(':react-native-audio')
ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ(':react-native-fetch-blob')
ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ(':react-native-fs')
ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ(':react-native-geocoder')
์ปดํŒŒ์ผ ํ”„๋กœ์ ํŠธ(':react-native-image-crop-picker')
์ปดํŒŒ์ผ ํ”„๋กœ์ ํŠธ(': react-native-version-check')
ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ(':react-native-charts-wrapper')
ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ(':react-native-spinkit')
์ปดํŒŒ์ผ ํ”„๋กœ์ ํŠธ(':react-native-svg')
ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ(':๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ๋งต')
fileTree ์ปดํŒŒ์ผ(๋””๋ ‰ํ„ฐ๋ฆฌ: "libs", ํฌํ•จ: ["*.jar"])
" com.android.support:appcompat-v7:23.0.1 " ์ปดํŒŒ์ผ
compile "com.facebook. react:react-native :+" // node_modules์—์„œ
}

// BUCK์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
// ๋ชจ๋“  ์ปดํŒŒ์ผ ์ข…์†์„ฑ์„ BUCK๊ฐ€ ์‚ฌ์šฉํ•  ํด๋” libs์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
์ž‘์—… copyDownloadableDepsToLibs(์œ ํ˜•: ๋ณต์‚ฌ) {
๊ตฌ์„ฑ.์ปดํŒŒ์ผ์—์„œ
'libs'๋กœ
}

`android/app/src/main/java/com/binomysteryshopper/MainApplication.java`

ํŒจํ‚ค์ง€ com.binomysteryshopper;

import android.app.Application;

import com.facebook.react.ReactApplication;
๊ฐ€์ ธ์˜ค๊ธฐ com.geektime.rnonesignalandroid.ReactNativeOneSignalPackage;
๊ฐ€์ ธ์˜ค๊ธฐ com.zmxv.RNSound.RNSoundPackage;
import com.rnim.rn.audio.ReactNativeAudioPackage;
๊ฐ€์ ธ์˜ค๊ธฐ com.RNFetchBlob.RNFetchBlobPackage;
import com.rnfs.RNFSPackage;
๊ฐ€์ ธ์˜ค๊ธฐ com.reactnative.ivpusic.imagepicker.PickerPackage;
io.xogus.reactnative.versioncheck.RNVersionCheckPackage ๊ฐ€์ ธ์˜ค๊ธฐ;
๊ฐ€์ ธ์˜ค๊ธฐ com.github.wuxudong.rncharts.MPAndroidChartPackage;
import com.react.rnspinkit.RNSpinkitPackage;
๊ฐ€์ ธ์˜ค๊ธฐ com.horcrux.svg.SvgPackage;
๊ฐ€์ ธ์˜ค๊ธฐ com.facebook.react.ReactNativeHost;
๊ฐ€์ ธ์˜ค๊ธฐ com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
com.devfd.RNGeocoder.RNGeocoderPackage ๊ฐ€์ ธ์˜ค๊ธฐ;
๊ฐ€์ ธ์˜ค๊ธฐ com.facebook.soloader.SoLoader;
๊ฐ€์ ธ์˜ค๊ธฐ com.airbnb.android.react.maps.MapsPackage;

๊ฐ€์ ธ์˜ค๊ธฐ java.util.Arrays;
๊ฐ€์ ธ์˜ค๊ธฐ java.util.List;

๊ณต์šฉ ํด๋ž˜์Šค MainApplication ํ™•์žฅ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ ReactApplication {

๊ฐœ์ธ ์ตœ์ข… ReactNativeHost mReactNativeHost = ์ƒˆ๋กœ์šด ReactNativeHost(this) {
@์šฐ์„ธํ•˜๋‹ค
๊ณต๊ฐœ ๋ถ€์šธ getUseDeveloperSupport() {
BuildConfig.DEBUG๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
}

<strong i="13">@Override</strong>
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage(),
        new ReactNativeOneSignalPackage(),
        new RNSoundPackage(),
        new ReactNativeAudioPackage(),
        new RNFetchBlobPackage(),
        new RNFSPackage(),
        new PickerPackage(),
        new RNVersionCheckPackage(),
        new MPAndroidChartPackage(),
        new RNSpinkitPackage(),
        new RNGeocoderPackage(),
        new SvgPackage(),
        new MapsPackage()
  );
}

<strong i="14">@Override</strong>
protected String getJSMainModuleName() {
  return "index";
}

};

@์šฐ์„ธํ•˜๋‹ค
๊ณต๊ฐœ ReactNativeHost getReactNativeHost() {
mReactNativeHost๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
}

@์šฐ์„ธํ•˜๋‹ค
๊ณต๊ฐœ ๋ฌดํšจ onCreate() {
super.onCreate();
SoLoader.init(this, /* ๊ธฐ๋ณธ ์—‘์†ŒํŒจํ‚ค์ง€ */ false);
}
}

`AndroidManifest.xml`

ํŒจํ‚ค์ง€="com.binomysteryshopper">









์•ˆ๋“œ๋กœ์ด๋“œ:minSdkVersion="16"
์•ˆ๋“œ๋กœ์ด๋“œ:targetSdkVersion="22" />

android:name=".MainApplication"
์•ˆ๋“œ๋กœ์ด๋“œ:allowBackup="์ฐธ"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
์•ˆ๋“œ๋กœ์ด๋“œ:largeHeap="์ฐธ"
android:theme="@style/AppTheme">

<activity
  android:name=".MainActivity"
  android:launchMode="singleTop"
  android:label="@string/app_name"
  android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
  android:screenOrientation="portrait"
  android:windowSoftInputMode="adjustResize"
  android:theme="@style/AppTheme">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="binoshopper" />
    </intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />


`my OneSignal init`

componentWillMount() {
OneSignal.init(ONESIGNAL_APP_ID, {
kOSSettingsKeyAutoPrompt: ์ฐธ,
kOSSettingsKeyInAppLaunchURL: ๊ฑฐ์ง“,
kOSSSettingsKeyPromptBeforeOpeningPushURL: true,
})
OneSignal.inFocusDisplaying(2)

OneSignal.addEventListener('received', this.onPushNotificationReceived)
OneSignal.addEventListener('opened', this.onPushNotificationOpened)

}

componentWillUnmount() {
OneSignal.removeEventListener('received', this.onPushNotificationReceived)
OneSignal.removeEventListener('์—ด๋ฆผ', this.onPushNotificationOpened)
}

onPushNotificationReceived(์•Œ๋ฆผ) {
Alert.alert('onReceived') // ์‹ค์ œ ์žฅ์น˜์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์šฉ
}

onPushNotificationOpened(openResult) {
Alert.alert('onOpened') // ์‹ค์ œ ์žฅ์น˜์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ์šฉ
}
```

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@sofianegargouri ์—ฌ๊ธฐ PR์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/geektimecoil/react-native-onesignal/pull/592

์šฐ๋ฆฌ๋Š” ๋‚ด์ผ์ด๋‚˜ ๋ชจ๋ ˆ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐœํ‘œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  35 ๋Œ“๊ธ€

IOS์—์„œ๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ์‹ค์ œ ์žฅ์น˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— Android logcat์—์„œ ๋กœ๊ทธ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. TeamViewer๋กœ ์ธํ•ด ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ์นœ๊ตฌ์˜ ๊ธฐ๊ธฐ์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ OneSignal.setLogLevel(0, 6) ๋„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜๊ณ  ๋ชจ๋“  ์š”์ฒญ์ด ์„ฑ๊ณตํ–ˆ์œผ๋ฉฐ ์ด๋ฒคํŠธ๋งŒ ๋ฐœ์ƒํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@Ble3k๋‹˜ , ์•ˆ๋…•ํ•˜์„ธ์š”, ์šฐ๋ฆฌ๋Š” ์ตœ๊ทผ ์ƒˆ๋กœ์šด Flutter SDK ์ž‘์—…์œผ๋กœ ๋งค์šฐ ๋ฐ”๋นด๊ณ  ์•„์ง ๊ท€ํ•˜์˜ ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•  ์‹œ๊ฐ„์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด์ผ ์กฐ์‚ฌํ•˜๊ณ  ๊ณง ๋‹ค์‹œ ์—ฐ๋ฝ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€์—ฐ์— ๋Œ€ํ•ด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์•ˆ๋…•,

๊ฐœ๋ฐœ์ž ์žฅ์น˜์˜ 3.2.5์—์„œ ๋™์ผํ•œ ๋™์ž‘์ด ํ‘œ์‹œ๋œ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ์•„๋ฌด๊ฒƒ๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด์ƒํ•˜๊ณ  ๋ฉฐ์น  ์ „์—๋„ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์ค‘๋œ ํ‘ธ์‹œ๊ฐ€ ์ธ์•ฑ ํ† ์ŠคํŠธ๋กœ ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ž‘๋™ํ–ˆ๋˜ ๊ฒƒ์œผ๋กœ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์— ํฌ์ปค์Šค๊ฐ€ ์žˆ์–ด๋„ ์ผ๋ฐ˜ ํ‘ธ์‹œ ์•Œ๋ฆผ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ด์ƒ ์กฐ์‚ฌํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

@Nightsd01 Thx๋‹˜, ์กฐ์‚ฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ ์ˆ˜์‹ ์ด ์ง€์—ฐ๋˜๋Š” Android์—์„œ ๋‚ด Android ํœด๋Œ€์ „ํ™”์—์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ  30-40๋ถ„ ํ›„์— ์•Œ๋ฆผ์„ ๋ฐ›์•˜์œผ๋ฉฐ ์—ฌ๋Ÿฌ ๋ฒˆ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? Android ๊ธฐ๊ธฐ(Samsung Galaxy S7)์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

onOpened ๋˜๋Š” onReceived ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ ์•Œ๋ฆผ์€ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค. onOpened ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‚ฌ์šฉ์ž๋ฅผ ํŠน์ • ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

R์„ ๋‘ ๋ฒˆ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ react-native-restart ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ Android ์•ฑ์— ๋ฐ˜์‘์„ ๋‹ค์‹œ ๋กœ๋“œํ•œ ํ›„ ์ด๋ฒคํŠธ(์ˆ˜์‹ , ์—ด๋ฆผ)๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@ackosumane ์ €๋Š” ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์—์„œ Expo์™€ Updates.reload() ๋ฅผ ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค.

  • ์ฒซ ๋ฒˆ์งธ ์•ฑ ์‹œ์ž‘ ์‹œ ์ฝœ๋ฐฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์•ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•œ ํ›„ ์‹คํ–‰๋œ ์ฝœ๋ฐฑ์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Nightsd01 ๋”ฐ๋ผ์„œ OneSignal RN Android ํ†ตํ•ฉ์€ ํ˜„์žฌ ์•ฑ ๋‹ค์‹œ ๋กœ๋“œ๋ฅผ ์ž˜ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋งŒํผ ์˜ํ–ฅ๋ ฅ์ด ํฌ์ง€๋Š” ์•Š์ง€๋งŒ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ๋‹ค์‹œ ๋กœ๋“œํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ํ”„๋กœ๋•์…˜ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(Expo/CodePush์™€ ๊ฐ™์€ OverTheAir ์—…๋ฐ์ดํŠธ ๋˜๋Š” ์‚ฌ์šฉ์ž ๋กœ๊ทธ์•„์›ƒ?). ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ๋กœ๋“œํ•œ ํ›„ ํ‘ธ์‹œ๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ;)

@Nightsd01 ์•ˆ๋…•ํ•˜์„ธ์š”, ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”, ์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ ???

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋กœ: ๋‹ค์Œ ์—…๋ฐ์ดํŠธ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค!

@Nightsd01 ์–ด๋–ค ๋‚ ์งœ? ์ˆ˜์ • ์‚ฌํ•ญ์œผ๋กœ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@sofianegargouri ์—ฌ๊ธฐ PR์ด ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/geektimecoil/react-native-onesignal/pull/592

์šฐ๋ฆฌ๋Š” ๋‚ด์ผ์ด๋‚˜ ๋ชจ๋ ˆ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐœํ‘œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Nightsd01 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ์ƒˆ npm ๋ฆด๋ฆฌ์Šค๋ฅผ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด๋ผ๋ฉด master์˜ ์ฝ”๋“œ๊ฐ€ ์ด์ œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์„ ์‹คํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

npm ์„ค์น˜ git+ https://github.com/geektimecoil/react-native-onesignal#master --save

@eabuslaiman30 ์—ฌ์ „ํžˆ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด git+ https://github.com/geektimecoil/react-native-onesignal#master ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ Android์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ์–ด๋–ค ์ตœ์‹  ๋ฒ„์ „์ด ์•ˆ์ •์ ์ธ์ง€ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์ „์—๋Š” Android 8.0(Oreo)์—์„œ ์•ฑ์ด ์ข…๋ฃŒ๋˜๊ณ  ์•Œ๋ฆผ์ด ์ˆ˜์‹ ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ž˜ ์ž‘๋™ํ•˜๋Š” 3.0.5 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@eabuslaiman30 @Nightsd01 ์ €๋„ ์‹œ๋„ํ–ˆ๊ณ  @shahchaitanya ์ฒ˜๋Ÿผ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ๊ตฌ๋…ํ•˜์ง€ ์•Š๋Š” ์ฒญ์ทจ์ž๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” PR์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค: https://github.com/geektimecoil/react-native-onesignal/pull/593

@shahchaitanya ์ด ์ž‘์€ ๋ณ€๊ฒฝ์œผ๋กœ ๋กœ์ปฌ ํ”„๋กœ์ ํŠธ Java ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ผ์‹œ์ ์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @slorber ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์€ onOpened ๋ฐ onReceived ๋ฉ”์†Œ๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ onIds ์ด๋ฒคํŠธ๊ฐ€ ์•„์ง ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ์ฝ”๋“œ์—์„œ onIds ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๊นŒ? ์ตœ์‹  ๋ฒ„์ „์ด ์•ˆ์ •๋  ๋•Œ๊นŒ์ง€ react-native-onesignal ๋ฒ„์ „ 3.0.5๋ฅผ ๊ณ ์ˆ˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ํ…Œ์ŠคํŠธํ–ˆ์œผ๋ฉฐ onIds๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ 3๊ฐœ์˜ ์ฝœ๋ฐฑ์ด ๋ชจ๋‘ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

onIds๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ ID๊ฐ€ ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์ ๊ณ  ์ด๋ฏธ ๋ฐฑ์—”๋“œ๋กœ ์ „์†ก๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์—๊ฒŒ ํฐ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

@slorber ์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ onIds๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉด ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋กœ์ปฌ ์ €์žฅ์†Œ์™€ ๋ฐฑ์—”๋“œ์—๋„ idToken์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ์•„์›ƒ ์‹œ ๋ฐฑ์—”๋“œ์—์„œ ์ œ๊ฑฐํ–ˆ์œผ๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ์ง€์šฐ๋ฉด onIds๊ฐ€ ๋งค๋ฒˆ ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž์˜ idToken์„ ์–ด๋–ป๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 3.2.0(์ฃผ์š” ์—…๋ฐ์ดํŠธ) ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค onIds๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„ @slorber @shahchaitanya. ๋‚ด ๊ตฌํ˜„ ์ฝ”๋“œ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณต์‚ฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ด์ „ ๋ฒ„์ „์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ ์ค„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค).

OneSignal.init('YOUR_APP_ID');
OneSignal.addEventListener('ids', this.onIds);
OneSignal.configure();

์˜ˆ๋ฅผ ๋“ค์–ด, ์ดˆ๊ธฐํ™”๊ฐ€ Java ์ฝ”๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๋ฒ„์ „์—์„œ๋Š” "์ดˆ๊ธฐํ™”" ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ npm install git+https://github.com/geektimecoil/react-native-onesignal\#master --save ๋ฅผ ์ข…์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์„ธ ๊ฐ€์ง€ ์ด๋ฒคํŠธ(onIds, ์ˆ˜์‹ , ์—ด๋ฆผ)๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์‹ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ init ๋ฐ configure๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ configure๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์„ ๋•Œ id๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.

    OneSignal.init(OneSignalAppId, OneSignalSettings);
    OneSignal.addEventListener('received', onReceived);
    OneSignal.addEventListener('opened', onOpened);
    OneSignal.addEventListener('ids', onIds);
    // Quickfix for ids event not firing!
    // See https://github.com/geektimecoil/react-native-onesignal/issues/200#issuecomment-288579373
    OneSignal.configure();
    OneSignal.inFocusDisplaying(inFocusDisplaying);
    OneSignal.setSubscription(true);
    OneSignal.syncHashedEmail(email);
    OneSignal.sendTags(tags);

@slorber @eabuslaiman30 ์ด์ œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. OneSignal.configure()๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋†“์ณค์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” onIds ๋ฆฌ์Šค๋„ˆ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•ˆ๋…•ํ•˜์„ธ์š” @slorber ์ด์ œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ํŒจ์น˜๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. @eabuslaiman30 ์†”๋ฃจ์…˜์€ ์ ˆ๋Œ€์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์™„๋ฒฝํ•œ @shahchaitanya , ํšจ๊ณผ๊ฐ€ ์žˆ์–ด์„œ ๊ธฐ์ฉ๋‹ˆ๋‹ค!

์ด ์ˆ˜์ • ์‚ฌํ•ญ์ด ํฌํ•จ๋œ ๊ณต์‹ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๊ณง ๋‚˜์˜ฌ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

์ตœ๊ทผ์— Android SDK์—์„œ ๋‹ค์†Œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ์œผ๋ฏ€๋กœ ๊ณต์‹ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์—…๋ฐ์ดํŠธ๋ฅผ ์ถœ์‹œํ•˜๊ธฐ ์ „์— ํ•ด๋‹น PR์ด ๊ฒ€ํ† ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋‘ ๊ธฐ๋‹ค๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๊ทธ ๋™์•ˆ ๋‹น์‹ ์€ ๋‹จ์ˆœํžˆ ๋งˆ์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

@shahchaitanya ids ์ด๋ฒคํŠธ๋Š” OneSignal๋กœ ์‚ฌ์šฉ์ž์˜ ID ๋˜๋Š” ํ‘ธ์‹œ ํ† ํฐ์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ๋‹จ์ˆœํžˆ ๋ฐœ์ƒํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ฑ์„ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ฌ์šฉํ•œ ์ดํ›„๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ด๋ฒคํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์—์„œ ํ›จ์”ฌ ๋” ์ง๊ด€์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋งํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

configure() ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ฐ•์ œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ์šฐ์•„ํ•œ ์†”๋ฃจ์…˜์€ ์‚ฌ์šฉ์ž์˜ OneSignal ID๋ฅผ ํฌํ•จํ•˜๋Š” OneSignal.getPermissionSubscriptionState() ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด์ œ 3.2.6์—์„œ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์‚ฌํ•ญ๊ณผ ํ•จ๊ป˜). ๋ชจ๋‘ ๊ธฐ๋‹ค๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

์•ˆ๋…•! Android์—์„œ ์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(iOS๊ฐ€ ์™„์ „ํžˆ ํ™•์ธ๋˜์ง€ ์•Š์Œ).

  • ์•ฑ ํฌ์ปค์Šค - ์—ด๋ฆฐ ์ด๋ฒคํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋จ
  • ์•ฑ ํ•ด์ œ๋จ - ์—ด๋ฆฐ ์ด๋ฒคํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‹คํ–‰๋จ
  • ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์•ฑ - ์—ด๋ฆฐ ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์Œ

์ €๋Š” 3.2.6 ๋ฆด๋ฆฌ์Šค๋ฅผ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์„ค์ •์€...

componentDidMount() {

        OneSignal.init(APP_ID, { kOSSettingsKeyAutoPrompt: true });

        OneSignal.addEventListener('ids', this.onIds);

        OneSignal.addEventListener('opened', (result) => alert('text'));

        OneSignal.inFocusDisplaying(2);

        // OneSignal.setLogLevel(0, 6);

        OneSignal.configure();
}

componentWillUnmount() {
    OneSignal.removeEventListener('ids', this.onIds);
    OneSignal.removeEventListener('opened', (result) => alert('text'));
}

@joefazz ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค yarn remove react-native onesignal ๋ฐ yarn add react-native-onesignal ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ 3.2.6์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ 100% ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ?

๋ฐ๋ชจ ํ”„๋กœ์ ํŠธ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

100% ๋ฐœ์ƒํ•˜๋ฉฐ ์ œ๊ฑฐํ•˜๊ณ  ์ฝ์€ ํ›„์—๋„ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ ๋‚˜์ค‘์— ๋‹ค์‹œ ์žฌ์ƒ์‚ฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ๋‚ด ๋ฐœ๊ฒฌ์œผ๋กœ ์ด ์˜๊ฒฌ์„ ํŽธ์ง‘ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๊ด€๋ จ์„ฑ์ด ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‚ด๊ฐ€ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” ๋ฒ„์ „ 3.0.9์— ์žˆ์—ˆ๊ณ  3.2.6์œผ๋กœ ์™„์ „ํžˆ ์—…๊ทธ๋ ˆ์ด๋“œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. react-native unlink๋ฅผ ์‹คํ–‰ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์—ฐ๊ฒฐํ•˜๊ณ  iOS๋ฅผ ์ˆ˜๋™์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ณ  OneSignal.init() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ธฐ๋ณธ ์ดˆ๊ธฐํ™”๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด์ œ Android์—์„œ 100% ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ซํžŒ ๋ฌธ์ œ์— ๋Œ“๊ธ€์„ ๋‹ฌ์•„ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜…

๋ˆ„๊ตฐ๊ฐ€ 3.2.6 ์ด์ƒ์—์„œ ์ด ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋ณด๊ฒŒ ๋œ๋‹ค๋ฉด ์–ธ์ œ๋“ ์ง€ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”.

@joefazz ๋ฐ˜๊ฐ‘ ์Šต๋‹ˆ๋‹ค! ์ดˆ๊ธฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ์ผ์ข…์˜ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด ๋ฐœ์ƒํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ๋‹ค์‹œ ํ‘œ์‹œ๋˜๋ฉด ์–ธ์ œ๋“ ์ง€ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์„ธ์š”.

๋‚ด ์•ฑ์—์„œ ์ƒˆ ๋ฒ„์ „์ด ๋‚ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ • ํ–ˆ๋Š”๋ฐ @joefazz ์—์„œ ๋ณด๊ณ ํ•œ ๋™์ž‘์ด ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. OneSignal.addEventListener('opened', (result) => console.log(result)); ์•ฑ์˜ ๋‘ ๋ฒˆ์งธ ์‹คํ–‰์—์„œ ์‹œ์ž‘๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๋ชจ๋“œ ์—์„œ ์ฒซ ๋ฒˆ์งธ ์•Œ๋ฆผ์€ '์—ด๋ฆผ' ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ  ์•ฑ ์ข…๋ฃŒ => ์•Œ๋ฆผ ๋ฐ›๊ธฐ => '์—ด๋ฆผ'์€ ๋‹ค์‹œ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ๋งŒ - 8 ๋ฒ„์ „
์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ์žˆ์„ ๋•Œ ๋‘ ๋ฒˆ์งธ ์•Œ๋ฆผ ํ›„์—๋งŒ
react-native-onesignal - 3.9.1

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์ผ ๋•Œ ์—ด๋ฆฌ์ง€ ์•Š์Œ

@kostiantyn-solianyk @shrolr ,
์š”์•ฝํ•˜์ž๋ฉด 'opened' ์ด๋ฒคํŠธ๋Š” Android 8์—์„œ ์•ฑ์„ ๋‘ ๋ฒˆ์งธ๋กœ ์—ด ๋•Œ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ์ด๋ฒคํŠธ๋Š” ๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค(ํ˜„์žฌ ๋ฒ ํƒ€ ๋ฒ„์ „)์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒ ํƒ€๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•ด ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ์ง€์†๋˜๋ฉด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๊ฑด๋ฐฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰