React-native-onesignal: ν‘Έμ‹œ μ•Œλ¦Ό 클릭 ν›„ μ•± λ‹€μ‹œ λ Œλ”λ§

에 λ§Œλ“  2019λ…„ 01μ›” 05일  Β·  30μ½”λ©˜νŠΈ  Β·  좜처: OneSignal/react-native-onesignal

μ„€λͺ…:
ν‘Έμ‹œ μ•Œλ¦Όμ„ ν΄λ¦­ν•˜λ©΄ Android 앱이 λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€. IOSμ—μ„œ ν™•μΈν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

ν™˜κ²½
react-native-onesignal: 3.2.11,
λ°˜μ‘: 16.6.0-alpha.8af6728,
λ°˜μ‘ λ„€μ΄ν‹°λΈŒ: 0.57.4,

npm install --save react-native-onesignal λͺ…령을 μ‚¬μš©ν•˜μ—¬ oneSignal을 μ„€μΉ˜ν–ˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ„œμ— 따라 oneSignal νŒ¨ν‚€μ§€λ₯Ό κ΅¬μ„±ν–ˆμŠ΅λ‹ˆλ‹€. https://documentation.onesignal.com/v5.0/docs/react-native-sdk-setup

문제 μž¬ν˜„ 단계:

  1. npm을 μ‚¬μš©ν•˜μ—¬ OneSignal SDKλ₯Ό ν”„λ‘œμ νŠΈμ— μ„€μΉ˜ν•©λ‹ˆλ‹€.
  2. Androidμ—μ„œ SDK μ΄ˆκΈ°ν™”
  3. OneSignal webSiteλ₯Ό 톡해 ν‘Έμ‹œ μ•Œλ¦Όμ„ λ³΄λƒ…λ‹ˆλ‹€(ν…ŒμŠ€νŠΈμš©).
  4. 앱이 ν¬κ·ΈλΌμš΄λ“œμ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€.
  5. μˆ˜μ‹ λœ ν‘Έμ‹œ μ•Œλ¦Όμ„ ν΄λ¦­ν–ˆμŠ΅λ‹ˆλ‹€.
  6. 앱이 λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€.

react-navigation: 2.16 μžˆμŠ΅λ‹ˆλ‹€.
이것은 λ‚΄ μ½”λ“œμž…λ‹ˆλ‹€.

componentDidMount() {
        // One signal notification settings
        OneSignal.configure();
        OneSignal.setLogLevel(5, 0); // adb logcat debug (5) logs
        OneSignal.init('xxxxxxxxxxxx');
        OneSignal.inFocusDisplaying(2);
        OneSignal.addEventListener('ids', this.onIds);
        OneSignal.getPermissionSubscriptionState((status) => {
            if(status.userId)
                // update userID using props
    });
    }
    onIds = (device) => {
        const userId = device.userId;
        if(userId)
           // update userID using props

        OneSignal.removeEventListener('ids', this.onIds);
    }



md5-e56be07ed32a6f3a60c846daed91829f



        OneSignal.addEventListener('received', this.onReceived);
        OneSignal.addEventListener('opened', this.onOpened); 

λ‚˜λŠ” 해결책을 찾으렀고 λ…Έλ ₯ν•˜μ§€λ§Œ, λ‚˜λŠ” ν•  수 μ—†μ—ˆλ‹€. 이에 λŒ€ν•΄ μ–΄λ–€ 생각이 μžˆλŠ” μ‚¬λžŒμ΄ 있으면 μ•Œλ €μ£Όμ„Έμš”.

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

@rgomezp :
응닡해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.
이전 λŒ“κΈ€μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μˆ˜μ •μ„ κ³„νšν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλ•ŒκΉŒμ§€ μš°λ¦¬λŠ” 기닀릴 κ²ƒμž…λ‹ˆλ‹€.

λͺ¨λ“  30 λŒ“κΈ€

앱이 λ‹€μ‹œ λ Œλ”λ§λ˜λŠ” 이유λ₯Ό μ•Œμ•˜μŠ΅λ‹ˆλ‹€. μ•Œλ¦Όμ„ ν΄λ¦­ν•˜λ©΄ 앱이 λ°±κ·ΈλΌμš΄λ“œλ‘œ μ΄λ™ν•œ λ‹€μŒ ν¬κ·ΈλΌμš΄λ“œλ‘œ μ΄λ™ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.
μ•± μƒνƒœκ°€ λ³€κ²½λ˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ•Œλ¦Όμ„ ν΄λ¦­ν–ˆμ„ λ•Œ.
이것을 λ©ˆμΆ”λŠ” 방법.

AndroidManifest.xml에 android:launchMode= "singleTop"을 μΆ”κ°€ν–ˆμŠ΅λ‹ˆκΉŒ?

@martinosmartinos λ„€, μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

λŒ€μ‹  논리λ₯Ό componentWillMount 수λͺ… 주기둜 μ΄λ™ν•˜κ³  도움이 λ˜λŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

@martinosmartinosλ₯Ό μ§€μ›ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @janaka120
앱에 λ”₯링크λ₯Ό μ‹œλ„ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 이 μ£Όμ œμ— λŒ€ν•œ μžμ„Έν•œ μ •λ³΄λŠ” μ—¬κΈ° μ—μ„œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. λ°˜μ‘ νƒμƒ‰μœΌλ‘œ 인해 λ¬Έμ œκ°€ λ°œμƒν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

전체 앱이 λ‹€μ‹œ λ Œλ”λ§λ˜λŠ”μ§€ μ•„λ‹ˆλ©΄ ν˜„μž¬ 화면이 λ‹€μ‹œ λ Œλ”λ§λ¨(react-lifecycle)을 μ˜λ―Έν•˜λŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” @rgomezp

ν‘Έμ‹œ μ•Œλ¦Όμ„ νƒ­ν•˜λ©΄ 전체 앱이 λ Œλ”λ§λ©λ‹ˆλ‹€.

@janaka120 μ•Œκ² μŠ΅λ‹ˆλ‹€ . λ©”νŠΈλ‘œ λ²ˆλ“€λŸ¬κ°€ λͺ¨λ“  것을 μž¬κ΅¬μΆ•ν•˜κ±°λ‚˜ λ‹¨μˆœνžˆ μ‹œμž‘ ν™”λ©΄ 및/λ˜λŠ” ν™ˆνŽ˜μ΄μ§€λ‘œ λŒμ•„κ°€λ‚˜μš”?

@rgomezp μ‹œμž‘ ν™”λ©΄μœΌλ‘œ λŒμ•„κ°€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” ν™ˆνŽ˜μ΄μ§€λ‘œ λŒμ•„κ°‘λ‹ˆλ‹€. ν‘Έμ‹œ μ•Œλ¦Όμ„ νƒ­ν•œ ν›„ κΈ°λ³Έ app.jsλ₯Ό μ½˜μ†”ν•˜λ©΄ λ‚΄ 앱이 ν™ˆ ν™”λ©΄μœΌλ‘œ λΌμš°νŒ…λ©λ‹ˆλ‹€.

@janaka120 ok κ·Έλž˜μ„œ 확인을 μœ„ν•΄ 앱이 μ˜¬λ°”λ₯΄κ²Œ λ‹€μ‹œ λ²ˆλ“€λ˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

@rgomezp λ„€. 재포μž₯이 μ•„λ‹™λ‹ˆλ‹€.

이것은 λ”₯링킹 문제처럼 λ“€λ¦½λ‹ˆλ‹€. λ”₯ 링크λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ„€μ •ν•˜λŠ” 방법에 λŒ€ν•œ μ„€λͺ…μ„œλ₯Ό 읽고 λͺ¨λ“  μž‘μ—…μ„ μ˜¬λ°”λ₯΄κ²Œ μˆ˜ν–‰ν–ˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€. https://documentation.onesignal.com/docs/links

@rgomezp ν‘Έμ‹œ μ•Œλ¦Όκ³Ό ν•¨κ»˜ λ”₯ 링크λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

iOSμ—μ„œ λ™μΌν•œ κ²°κ³Όκ°€ λ‚˜νƒ€λ‚˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ? μ™œ 이런 일이 λ°œμƒν•˜λŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μƒνƒœκ°€ λ³€κ²½λ˜λ©΄ Reactκ°€ λ‹€μ‹œ λ Œλ”λ§λ©λ‹ˆλ‹€.

λ¬΄μ‘λ‹΅μœΌλ‘œ μ’…λ£Œ

그러면 λ¬Έμ œκ°€ 해결될 수 μžˆμŠ΅λ‹ˆλ‹€.
android:launchMode= "singleTop"을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  android:launchMode= "singleTask"λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

그러면 λ¬Έμ œκ°€ 해결될 수 μžˆμŠ΅λ‹ˆλ‹€.
android:launchMode= "singleTop"을 μ‚¬μš©ν•˜λŠ” λŒ€μ‹  android:launchMode= "singleTask"λ₯Ό μ‚¬μš©ν•˜μ„Έμš”.

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
또 λ‹€λ₯Έ λ¬Έμ œλŠ” μ΄λ©”μΌμ—μ„œ λ”₯ 링크λ₯Ό μ—΄ λ•Œ 앱이 μƒˆ μ•± μž‘μ—…μ„ μ—¬λŠ” κ²ƒμž…λ‹ˆλ‹€. μž‘μ—… κ΄€λ¦¬μžλ₯Ό μ—΄λ©΄ λ‚΄ 앱에 μ—¬λŸ¬ 탭이 μ‹€ν–‰ μ€‘μž…λ‹ˆλ‹€.
그리고 SINGLETASK둜 λ³€κ²½ν•˜λ©΄ ν•΄κ²°λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ λ‚΄ μ§ˆλ¬Έμ€ SINGLETASK둜 λ³€κ²½ν•˜λŠ” 경우 κ³ λ €ν•΄μ•Ό ν•  λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

@rgomezp Android의 원본 ν¬μŠ€ν„°μ™€ λ™μΌν•œ 문제λ₯Ό κ²ͺκ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 쀑이며 μ΅œμ†Œν™”ν•©λ‹ˆλ‹€. ν‘Έμ‹œ μ•Œλ¦Όμ΄ λ„μ°©ν•˜κ³  νƒ­ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—½λ‹ˆλ‹€. 이 μ‹œμ μ—μ„œ 전체 μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ λ‹€μ‹œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€. iOSμ—μ„œλŠ” 이런 μ‹μœΌλ‘œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν˜„μž¬ SDK λ¬Έμ„œμ—μ„œ ꢌμž₯ν•˜λŠ” λŒ€λ‘œ singleTop λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ§€λ§Œ λ‹€λ₯Έ λͺ¨λ“œμ—μ„œ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€.

λŒ€μ‹  singleTaskλ₯Ό μ‚¬μš©ν•˜μ„Έμš”.
μ™œ 그듀이 이 문제λ₯Ό ν•΄κ²°ν•˜μ§€ μ•ŠλŠ”μ§€ 이해가 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ 이것은 맀우 μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

@hotaryuzaki κ°μ‚¬ν•©λ‹ˆλ‹€. μ–΄μ œ 제 λŒ“κΈ€μ„ κ²Œμ‹œν•œ ν›„ singleTask 을 μ‚¬μš©ν•΄ λ³΄μ•˜λŠ”λ° μ§€κΈˆκΉŒμ§€ λˆˆμ— λ„λŠ” 문제 없이 μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. SDK μž‘μ„±μžκ°€ 이것이 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆλ‹€κ³  μ—¬λŸ¬ 번 λ§ν–ˆκΈ° λ•Œλ¬Έμ— κ±±μ •λ©λ‹ˆλ‹€.

예, λ‚˜λŠ” 그것에 λŒ€ν•΄ κ·Έλ“€λ‘œλΆ€ν„° 확인을 λ°›μ•˜μ§€λ§Œ λ¬Έμ œκ°€ μ˜λ―Έν•˜λŠ” μ„ΈλΆ€ 사항에 λŒ€ν•΄μ„œλŠ” μ–ΈκΈ‰ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
그것이 문제라면 μ™œ 그듀이 그것을 μˆ˜μ •ν•˜μ§€ μ•Šμ•˜λŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

μ•ˆλ…•,
ν–₯ν›„ λ¦΄λ¦¬μŠ€μ—μ„œ 이 문제λ₯Ό μˆ˜μ •ν•  κ³„νšμž…λ‹ˆλ‹€. κΈ°λ‹€λ € μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

@rgomezp : launchModeλ₯Ό 'singleTop'μ—μ„œ 'singleTask'둜 λ³€κ²½ν•  λ•Œ λ°œμƒν•  수 μžˆλŠ” κ°€λŠ₯ν•œ 문제 μ„ΈλΆ€ 정보λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?
λ”°λΌμ„œ 'singleTask'둜 μ „ν™˜ν•˜λŠ” μœ„ν—˜μ„ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€.
λ˜ν•œ auth0 및 onesignal λ¬Έμ œμ— μ§λ©΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ§€κΈˆμ€ 'singleTask'둜 μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€.

singleTask둜 μ„€μ •ν•˜λ©΄ ν™œλ™μ˜ μ—¬λŸ¬ 볡사본이 생성될 수 μžˆμŠ΅λ‹ˆλ‹€.

@jariwalabhavesh

@rgomezp :
응닡해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.
이전 λŒ“κΈ€μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μˆ˜μ •μ„ κ³„νšν•˜κ³  μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. κ·Έλ•ŒκΉŒμ§€ μš°λ¦¬λŠ” 기닀릴 κ²ƒμž…λ‹ˆλ‹€.

@rgomezp React Native λ¬Έμ„œ(https://facebook.github.io/react-native/docs/linking)에 따라 λ§ν¬ν•˜λ €λ©΄ MainActivityκ°€ singleTask μ—¬μ•Ό ν•©λ‹ˆλ‹€. 이 주변에 OneSignal이 μžˆμŠ΅λ‹ˆκΉŒ?

μ•ˆλ…•,
ν–₯ν›„ λ¦΄λ¦¬μŠ€μ—μ„œ 이 문제λ₯Ό μˆ˜μ •ν•  κ³„νšμž…λ‹ˆλ‹€. κΈ°λ‹€λ € μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

@rgomezp μž‘μ—…ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. 이 λ¬Έμ œκ°€ 아직 ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆκΉŒ?

이 κΈ°λŠ₯ μš”μ²­μ€ 아직 κ΅¬ν˜„λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.

@rgomezp μˆ˜μ • 사항이 μ–Έμ œ μ™„λ£Œλ 

λ‚˜λŠ” λ˜ν•œ singleTask 둜 μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€.

singleTask μ‚¬μš©ν•  λ•Œ μƒμ„±λ˜λŠ” ν™œλ™μ˜ μ—¬λŸ¬ 볡사본이 ν‘œμ‹œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ•Œλ¦Όμ„ λˆŒλ €μ„ λ•Œ 앱이 λ‹€μ‹œ μ‹€ν–‰λ˜μ§€ μ•Šλ„λ‘ ν•˜λŠ” μœ μΌν•œ λ°©λ²•μž…λ‹ˆλ‹€. λ”₯링크가 μ œλŒ€λ‘œ μž‘λ™ν•˜λ„λ‘ ν•˜λŠ” 것도 ν•„μš”ν•©λ‹ˆλ‹€...

Android의 ν‘Έμ‹œ μ•Œλ¦Όκ³Ό λ™μΌν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ μ €λŠ” λ”₯링크λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
λ¬Έμ œλŠ” 앱이 μ’…λ£Œλ˜κ³  μ•Œλ¦Όμ—μ„œ 열리면 μ²˜μŒλΆ€ν„° λͺ¨λ“  것을 λ‘œλ“œν•  λ•Œ μ—΄λ¦½λ‹ˆλ‹€. μ‚¬μš©μžκ°€ ν™ˆ λ²„νŠΌμ„ λˆ„λ₯΄κ³  λ‹€μ‹œ λŒμ•„μ˜€λ©΄ 앱은 항상 λ‹€μ‹œ λ‘œλ“œλ˜κ³  depp μ—°κ²°μ—μ„œ 항상 λ™μΌν•œ launchUrl을 λ‹€μ‹œ μ‹œμž‘ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰