๊ธฐ์ :
RNOneSignal.getDeviceState
์์ ์์๋ ์ฌ๋ฌ ์ค๋ฅ ๋ณด๊ณ ์๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค. ์คํ ์ถ์ ์ ์๋์ ์ฒจ๋ถ๋์ด ์์ต๋๋ค.
๋ชจ๋ Android SDK ๋ฒ์ ๋ฐ ์ ์กฐ์ ์ฒด์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
ํ๊ฒฝ
"react-native-onesignal": "^4.0.2",
react: 17.0.1 => 17.0.1
react-native: 0.64.0-rc.2 => 0.64.0-rc.2
๋ฌธ์ ์ฌํ ๋จ๊ณ :
๋ฌธ์ ๋ฅผ ์ฌํ ํ ์ ์์์ผ๋ฉฐ Google Play์ ์ถฉ๋ ๋์ ๋ณด๋์๋ณด๊ณ ๋์์ต๋๋ค.
๊ธฐํ :
at com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState (RNOneSignal.java:4)
at java.lang.reflect.Method.invoke (Method.java)
at com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:147)
at com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:21)
at com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
at android.os.Handler.handleCallback (Handler.java:883)
at android.os.Handler.dispatchMessage (Handler.java:100)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java)
at android.os.Looper.loop (Looper.java:237)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:37)
at java.lang.Thread.run (Thread.java:919)
+1.
java.lang.NullPointerException:
at com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState (RNOneSignal.java:4)
at java.lang.reflect.Method.invoke (Method.java)
at com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:147)
at com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:21)
at com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
at android.os.Handler.handleCallback (Handler.java:873)
at android.os.Handler.dispatchMessage (Handler.java:99)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java)
at android.os.Looper.loop (Looper.java:224)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:37)
at java.lang.Thread.run (Thread.java:764)
Howdy Diego,
์ด ๋ฌธ์ ๋ฅผ ์ ๊ณ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
์ฌ์ฉ์ค์ธ ์ฝ๋๋ฅผ ํฌํจ ํด ์ฃผ์๊ฒ ์ต๋๊น? ๋ํ ํ๊ฒฝ ์ ๋ณด (์ : ์ฅ์น ์ ์กฐ์ ์ฒด ๋ฐ ๋ชจ๋ธ, OS ๋ฑ)๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๊น?
๊ฑด๋ฐฐ
Howdy Diego,
์ด ๋ฌธ์ ๋ฅผ ์ ๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์ฌ์ฉ์ค์ธ ์ฝ๋๋ฅผ ํฌํจ ํด ์ฃผ์๊ฒ ์ต๋๊น? ๋ํ ํ๊ฒฝ ์ ๋ณด (์ : ์ฅ์น ์ ์กฐ์ ์ฒด ๋ฐ ๋ชจ๋ธ, OS ๋ฑ)๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๊น?
๊ฑด๋ฐฐ
๋ต์ฅ์ ๋ณด๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
Google Play ์ฝ์์์ ๋งค์ฃผ ์ฝ 50 ํ์ ์ถฉ๋ ์๋๋ก๋ณด๊ณ ๋๊ณ ์์ง๋ง ์ฌํ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ฌ๊ธฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
info ์์คํ
๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ณด๋ฅผ ๊ฐ์ ธ ์ค๋ ์ค ...
์ฒด๊ณ:
์ด์์ฒด์ : macOS 10.15.7
CPU : (4) x64 Intel (R) Core (TM) i5-5257U CPU @ 2.70GHz
๋ฉ๋ชจ๋ฆฌ : 36.86MB / 8.00GB
์
ธ : 5.7.1-/ bin / zsh
๋ฐ์ด๋๋ฆฌ :
๋
ธ๋ : 10.22.0-~ / .nvm / versions / node / v10.22.0 / bin / node
์์ฌ : 1.22.4-/ usr / local / bin / yarn
npm : 6.14.6-~ / .nvm / versions / node / v10.22.0 / bin / npm
์์น ๋งจ : 4.9.0-/ usr / local / bin / watchman
๊ด๋ฆฌ์ :
CocoaPods : 1.10.0-/ usr / local / bin / pod
SDK :
iOS SDK :
ํ๋ซํผ : iOS 13.6, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
Android SDK :
API ๋ ๋ฒจ : 23, 25, 26, 28, 29
๋น๋ ๋๊ตฌ : 28.0.3, 29.0.2, 29.0.3
Android NDK : ์ฐพ์ ์ ์์
์ญ์ค ์ผ:
์๋๋ก์ด๋ ์คํ๋์ค : 3.6 AI-192.7142.36.36.6308749
Xcode : 11.6 / 11E708-/ usr / bin / xcodebuild
์ธ์ด :
์๋ฐ : 1.8.0_242-/ usr / bin / javac
ํ์ด์ฌ : 2.7.16-/ usr / bin / python
npm ํจํค์ง :
@ react-native-community / cli : ์ฐพ์ ์ ์์
๋ฐ์ : 16.13.1 => 16.13.1
๋ฐ์ ๋ค์ดํฐ๋ธ : 0.63.3 => 0.63.3
react-native-macos : ์ฐพ์ ์ ์์
npmGlobalPackages :
react-native : ์ฐพ์ ์ ์์
"๋ฐ์ ๋ค์ดํฐ๋ธ": "0.63.3",
"react-native-onesignal": "^ 4.0.1",
์น๋ช
์ ์ธ ์์ธ : java.lang.NullPointerException
null ๊ฐ์ฒด ์ฐธ์กฐ์์ ๊ฐ์ ๋ฉ์๋ 'org.json.JSONObject com.onesignal.OSDeviceState.toJSONObject ()'ํธ์ถ ์๋
com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState (RNOneSignal.java:239)
java.lang.reflect.Method.invoke (Method.java)
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:151)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
android.os.Looper.loop (Looper.java:241)
com.facebook.react.bridge.queue.MessageQueueThreadImpl $ 4.run (MessageQueueThreadImpl.java:226)
java.lang.Thread.run (Thread.java:919)
์ฝ๊ฒ ๋ณต์ ํ ์ ์๋๋ก ์ฝ๋ ์ค ๋ํซ์ ์ ๊ณตํ์ญ์์ค.
๊ฑด๋ฐฐ
๋ฟก๋ฟก
OneSignal.getDeviceState () ํธ์ถ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
const getDeviceState = async () => {
const deviceState = await OneSignal.getDeviceState();
console.log({ deviceState });
}
์์ธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'org.json.JSONObject com.onesignal.OSDeviceState.toJSONObject()' on a null object reference
com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState (RNOneSignal.java:239)
java.lang.reflect.Method.invoke (Method.java)
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java:372)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java:151)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:883)
android.os.Handler.dispatchMessage (Handler.java:100)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java:27)
android.os.Looper.loop (Looper.java:241)
com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run (MessageQueueThreadImpl.java:226)
java.lang.Thread.run (Thread.java:919)
OneSignal ๋ฐ React Native ํจํค์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
"react-native": "0.63.3",
"react-native-onesignal": "^4.0.1",
````
The react native info:
```typescript
info Fetching system and libraries information...
System:
OS: macOS 10.15.7
CPU: (4) x64 Intel(R) Core(TM) i5-5257U CPU @ 2.70GHz
Memory: 36.86 MB / 8.00 GB
Shell: 5.7.1 - /bin/zsh
Binaries:
Node: 10.22.0 - ~/.nvm/versions/node/v10.22.0/bin/node
Yarn: 1.22.4 - /usr/local/bin/yarn
npm: 6.14.6 - ~/.nvm/versions/node/v10.22.0/bin/npm
Watchman: 4.9.0 - /usr/local/bin/watchman
Managers:
CocoaPods: 1.10.0 - /usr/local/bin/pod
SDKs:
iOS SDK:
Platforms: iOS 13.6, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
Android SDK:
API Levels: 23, 25, 26, 28, 29
Build Tools: 28.0.3, 29.0.2, 29.0.3
Android NDK: Not Found
IDEs:
Android Studio: 3.6 AI-192.7142.36.36.6308749
Xcode: 11.6/11E708 - /usr/bin/xcodebuild
Languages:
Java: 1.8.0_242 - /usr/bin/javac
Python: 2.7.16 - /usr/bin/python
npmPackages:
@react-native-community/cli: Not Found
react: 16.13.1 => 16.13.1
react-native: 0.63.3 => 0.63.3
react-native-macos: Not Found
npmGlobalPackages:
react-native: Not Found
๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
"๋ฐ์ ๋ค์ดํฐ๋ธ": "^ 0.63.4",
"react-native-onesignal": "^ 4.0.3"
"react-native-onesignal": "^ 3.9.3"์์ "react-native-onesignal": "^ 4.0.3"๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค. ์ง๊ธ ์ถฉ๋์ด ๋ฐ์ํฉ๋๋ค. ์์ ๊ฐ์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ์ต๋๋ค. ์๋ก ์ถ๊ฐํ์ต๋๋ค.
...
let device = await OneSignal.getDeviceState ();
...
Play ์คํ ์ด ์ถฉ๋ ๋ก๊ทธ์์
java.lang.NullPointerException :
com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState (RNOneSignal.java)
java.lang.reflect.Method.invoke (Method.java)
com.facebook.react.bridge.JavaMethodWrapper.invoke (JavaMethodWrapper.java)
com.facebook.react.bridge.JavaModuleWrapper.invoke (JavaModuleWrapper.java)
com.facebook.react.bridge.queue.NativeRunnable.run (NativeRunnable.java)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage (MessageQueueThreadHandler.java)์์
android.os.Looper.loop (Looper.java:148)
com.facebook.react.bridge.queue.MessageQueueThreadImpl $ 4.run (MessageQueueThreadImpl.java)
java.lang.Thread.run (Thread.java:818)
Firebase ์ถฉ๋ ๋ก๊ทธ
์น๋ช
์ ์ธ ์์ธ : java.lang.NullPointerException : null ๊ฐ์ฒด ์ฐธ์กฐ์์ ๊ฐ์ ๋ฉ์๋ 'org.json.JSONObject com.onesignal.g0.a ()'ํธ์ถ ์๋
com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState (RNOneSignal.java:4)
java.lang.reflect.Method.invoke (Method.java)์์
์๋
,
์ ๋ณด๋ฅผ ์ ๊ณต ํด์ฃผ์
์ ๊ฐ์ฌํ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ๊ฐ์ฅ ๋์์ด ๋ ์ฝ๋ ์์ ๋ฅผ ์ ๊ณต ํ ์ ์๋ค๋ฉด. ์ด
const getDeviceState = async () => {
const deviceState = await OneSignal.getDeviceState ();
console.log ({deviceState});
}
์ฌํํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ์๊ฒ ํ์ํ ๊ฒ์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ทธ๋ฆฌ๊ณ ์ด๋์ ์ฌ์ฉ๋๋์ง์ ๋ํ ๋ ๋ง์ ๋งฅ๋ฝ์ ๋๋ค.
์ : getDeviceState
๋ํ ํธ์ถ์ด OneSignal ์ด๊ธฐํ์ ์ด๋ค ๊ด๋ จ์ด ์์ต๋๊น? ๋๋ ์ด๋ค RN ์๋ช
์ฃผ๊ธฐ ๊ธฐ๋ฅ์ด ํธ์ถ๋ฉ๋๊น?
์ ๊ณต๋ ์คํ ์ถ์ ์ด ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ง ์์ผ๋ฏ๋ก์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํด์ผํฉ๋๋ค.
getDeviceState
๊ฐ ๋๋ฌด ๋นจ๋ฆฌ ํธ์ถ๋๋ฉด ์ด๋ฐ ์ผ์ด ๋ฐ์ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. getDeviceState
๋ฅผ OneSignal ์ด๊ธฐํ๊ฐ ์๋ฃ๋ ํ ์คํ๋๋๋ก ๋ณด์ฅ๋๋ ์ฝ๋ ์ง์ ์ผ๋ก ์ด๋ํด ๋ณผ ์ ์์ต๋๊น? ์ : ๊ตฌ๋
๋ณ๊ฒฝ ๊ด์ฐฐ์์ ๋ํ ์ฝ๋ฐฑ์ ๋ฃ์ต๋๋ค.
getDeviceState
๋ ํธ์ถ ๋ ๋ ์ค๋
์ท์ ์บก์ฒํฉ๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ์ํ๋ฅผ ์บ์ํ์ง ์๊ณ ํ์์ ๋ฐ๋ผ ๋ค์ ๊ฐ์ ธ์ต๋๋ค.
๋ฟก๋ฟก
์๋ ํ์ธ์, ์ง์ ์ ์ธ App.tsx์๋ ๋ค์์ด ์์ต๋๋ค.
const oneSignalIntialize = async () => {
OneSignal.setAppId('xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx');
}
const App = () => {
useEffect(() => {
oneSignalIntialize();
}, []);
return (
<LoginFlow />
);
}
๋ก๊ทธ์ธ ํ๋ฆ ํ์ ์ด๊ฒ์ด ์ฑ๊ณตํ๋ฉด ์์ ํ๋ฉด์ด ๋ํ๋ฉ๋๋ค.
const getDeviceState = async () => {
const deviceState = await OneSignal.getDeviceState();
console.log({ deviceState });
}
const WelcomeScreen = () => {
useEffect(() => {
getDeviceState();
}, []);
return (
<Components />
);
}
์๋
ํ์ธ์ @renatobentorocha ,
์ฝ๋๋ฅผ ๊ณต์ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค!
์ฌ๊ธฐ์ useEffect ํํฌ๋ฅผ ํธ์ถํ์ฌ ๊ธฐ๋ณธ ์ฑ ๊ตฌ์ฑ ์์ ๋ด์์ SDK๋ฅผ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ณธ์ง์ ์ผ๋ก ๊ตฌ์ฑ ์์๊ฐ ๋ง์ดํธ๋๋ ์ฆ์ ํธ์ถ๋๋ ๋น๋๊ธฐ ํธ์ถ์ด์ง๋ง ์ด๊ธฐํ๊ฐ ์๋ฃ๋์๋์ง ํ์ธํ๋ ์ํ๋ ์์ต๋๋ค.
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
useState ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ฉด์ ๋ ๋๋งํ๊ธฐ ์ ์ ์ด๊ธฐํ ์ํ๋ฅผ ํ์ธํ๋ ์ํ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,,.
@rgomezp ์์ ์ ์ํ ๋ ๋ค๋ฅธ ๊ถ์ฅ ์ฌํญ์
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
๋ฌธ์ ํด๊ฒฐ์ ๋์์ด๋๋์ง ์๋ ค์ฃผ์ธ์.
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
๊ฐ์ฌํฉ๋๋ค
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
์๋ ํ์ธ์ @ tyang1 ์ฃผ๋ชฉ
addSubscriptionObserver
ํ
์คํธํ๊ณ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค
์ด๊ฒ๋ ๋ฐ๊ณ ์์ต๋๋ค. ๋ฒ์ํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ ๋๋ค. @rgomezp ์๋ง๋ ์ค๋ ๋ฉ ๋ฌธ์ ์ ๋๊น? ์ด๊ฒ์ ๋ฌด์์๋ก ๋ฐ์ํ์ง๋ง ๊ฝค ๋ง์ด ๋ฐ์ํฉ๋๋ค. ์ถฉ๋ ๋ณด๊ณ ์์์ ๋ง์ ํ์ ์ ๋ณผ ์ ์์ต๋๋ค.
์๋
,
์คํ ์ถ์ ์ด ๋ํผ ์์ค์์ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ค๋ ๋ฉ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ํ์คํ ๋ฒ๊ทธ ์ผ ์ ์์ต๋๋ค. ํด์๋๋ฅผ ๋์ด๋ ค๋ฉด ์ ๋ขฐํ ์์๋ ์ฌํ ๋จ๊ณ ๋ง ์์ผ๋ฉด๋ฉ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋์์ 98 %๊ฐ ๋ฐ์ํ๊ณ ์๋ค๊ณ ๋ณด๊ณ ํ๋ ๊ฒ์ด ํฅ๋ฏธ๋ก์ด @renatobentorocha ์ ๋๋ค.
@oferRounds @dijinshopwise ์ด๊ฒ๋ ๋น์ ์ด๋ณด๊ณ ์๋ ๊ฒ์ ๋๊น?
+1
@rgomezp ๋ ์ฝ๋๋ฅผ ๋ฐ๋ฆ ๋๋ค.
async componentDidMount() {
this._isMounted = true
/* O N E S I G N A L S E T U P */
OneSignal.setAppId('***********************************')
OneSignal.setLogLevel(0, 0)
OneSignal.setRequiresUserPrivacyConsent(false)
/* O N E S I G N A L H A N D L E R S */
OneSignal.setNotificationWillShowInForegroundHandler(notifReceivedEvent => {
let notification = notifReceivedEvent.getNotification()
const buttonOk = {
text: 'OK', onPress: () => {
notifReceivedEvent.complete()
},
}
Alert.alert(notification.title, notification.body, [buttonOk])
if (notification.additionalData) {
//
}
})
OneSignal.setNotificationOpenedHandler(notification => {
//
})
OneSignal.disablePush(true)
const deviceState = await OneSignal.getDeviceState()
if (Platform.OS === 'ios' && !deviceState.isSubscribed) {
OneSignal.promptForPushNotificationsWithUserResponse(function(accepted) {
//
});
}
// ...
}
์ด์ ๋ฒ์ ์ผ๋ก ๋ค์ด ๊ทธ๋ ์ด๋ํ๊ณ Google Play์์ ๋์ผํ ์ค๋ฅ์ ๋ํด ๊ฒฝ๊ณ ํฉ๋๋ค.
com.geektime.rnonesignalandroid.RNOneSignal.getDeviceState
์ด๋ ํ ์ ์? ์์ ํด๊ฒฐ์ฑ ์ด ์์ต๋๊น?
์ฌ์ ํ ์๋ฐฑ ๊ฑด์ ์ถฉ๋์ด ๋ฐ์ํ๊ณ ์์ต๋๋ค. ๋ด์ค๊ฐ ์์ต๋๊น?
@ diego-paired ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ OneSingal ์ด๊ธฐํ ํ getDeviceState()
ํธ์ถ์ ์ง์ฐํ๋ ๊ฒ์ด ์์ต๋๋ค (2 ์ด ์ง์ฐ ์ถ๊ฐ).
@ diego-paired ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ OneSingal ์ด๊ธฐํ ํ
getDeviceState()
ํธ์ถ์ ์ง์ฐํ๋ ๊ฒ์ด ์์ต๋๋ค (2 ์ด ์ง์ฐ ์ถ๊ฐ).
ํ ๊ณ ๋ง์
์๋ ํ์ธ์ @renatobentorocha ,
์ฝ๋๋ฅผ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ฌ๊ธฐ์ useEffect ํํฌ๋ฅผ ํธ์ถํ์ฌ ๊ธฐ๋ณธ ์ฑ ๊ตฌ์ฑ ์์ ๋ด์์ SDK๋ฅผ ์ด๊ธฐํ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ๋ณธ์ง์ ์ผ๋ก ๊ตฌ์ฑ ์์๊ฐ ๋ง์ดํธ๋๋ ์ฆ์ ํธ์ถ๋๋ ๋น๋๊ธฐ ํธ์ถ์ด์ง๋ง ์ด๊ธฐํ๊ฐ ์๋ฃ๋์๋์ง ํ์ธํ๋ ์ํ๋ ์์ต๋๋ค.
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
useState ํํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๋ฉด์ ๋ ๋๋งํ๊ธฐ ์ ์ ์ด๊ธฐํ ์ํ๋ฅผ ํ์ธํ๋ ์ํ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
@rgomezp ์์ ์ ์ํ ๋ ๋ค๋ฅธ ๊ถ์ฅ ์ฌํญ์
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
๋ฌธ์ ํด๊ฒฐ์ ๋์์ด๋๋์ง ์๋ ค์ฃผ์ธ์.
,,,,,,,,, ๋ฌด,,,,,,,,,,,,,,,.
๊ฐ์ฌํฉ๋๋ค
@ diego-paired @ dan- ๊ฐ๋ฐ์
@rgomezp ์ ์์ ๋ฐ๋๊ณ ์ง๊ธ์ ์ถฉ๋์ด ์ค์ง๋์์ต๋๋ค.
OneSignal.addSubscriptionObserver(() => {
OneSignal.getDeviceState().then((deviceState) => {
console.log({deviceState})
});
});
ํ ์คํธ ์ฑ์ ์ฌ์ฉํ์ฌ ๋ค์ ์ฝ๋๋ฅผ ๋ฒํผ์ ์ถ๊ฐํ์ต๋๋ค.
์ํฉ 1
๏ปฟ๏ปฟlet getDeviceStateButton = this.renderButtonView(
"Get Device State",
isExternalUserIdLoading || isPrivacyConsentLoading,
() => {
console.log("Attempting to get device state");
this.setState({ isExternalUserIdLoading: true }, () => {
// OneSignal getDeviceState
let deviceState = OneSignal.getDeviceState();
console.log("deviceState: ", deviceState);
console.log("deviceState.isSubscribed: ", deviceState.isSubscribed);
this.setState({ isExternalUserIdLoading: false, isSubscribed: deviceState.isSubscribed });
console.log("this.state.isSubscribed after calling setState: ", this.state.isSubscribed);
console.log("deviceState.userId: ", deviceState.userId)
});
});
๋ก๊ทธ ์ผ :
2021-03-25 20:06:14.589544-0700 jonexample[751:27269] [javascript] Attempting to get device state
2021-03-25 20:06:14.645290-0700 jonexample[751:27269] [javascript] 'deviceState: ', { _U: 0, _V: 0, _W: null, _X: null }
2021-03-25 20:06:14.647385-0700 jonexample[751:27269] [javascript] 'deviceState.isSubscribed: ', undefined
2021-03-25 20:06:14.647768-0700 jonexample[751:27269] [javascript] 'this.state.isSubscribed after calling setState: ', undefined
2021-03-25 20:06:14.647897-0700 jonexample[751:27269] [javascript] 'deviceState.userId: ', undefined
๊ทธ๋ฌ๋ componentDidMount์ ์ ๊ณต๋ ์์ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ :
์ํฉ 2
async componentDidMount(){
๏ปฟ const deviceState = await OneSignal.getDeviceState();
this.setState({ isSubscribed : deviceState.isSubscribed});
console.log("componentDidMount deviceState: ", deviceState);
console.log("componentDidMount deviceState.isSubscribed: ", deviceState.isSubscribed);
console.log("componentDidMount deviceState.userId: ", deviceState.userId);
}
๋ก๊ทธ์๋ ๋ค์์ด ํ์๋ฉ๋๋ค.
2021-03-25 20:14:46.521099-0700 jonexample[1326:55465] [javascript] 'componentDidMount deviceState: ', { userId: '92aa2978-3f53-454e-b1a6-652c43f0dba4',
2021-03-25 20:14:46.521328-0700 jonexample[1326:55465] [javascript] 'componentDidMount deviceState.isSubscribed: ', true
2021-03-25 20:14:46.521435-0700 jonexample[1326:55465] [javascript] 'componentDidMount deviceState.userId: ', '92aa2978-3f53-454e-b1a6-652c43f0dba4'
@rgomezp ๋ ์๋๋ฆฌ์ค 1 ์์ ๋์์ ๋๊น?
@ diego-paired @renatobentorocha @ dan-developer๊ฐ ์ฌ๋ฌ๋ถ์ ์์ ๋ฅผ ๊ณต์ ํ๊ฑฐ๋ ์์ ๋ ์ํฉ์ด ๋ชจ๋ ๋ง๋์ง ํ์ธํ ์ ์์ต๋๊น?
์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์ธํ ์ค๋ช ํ๊ณ ์ฌํ ๋จ๊ณ๋ฅผ ํฌํจํ์ญ์์ค.
@ jfishman1 ๋ฌธ์๋ฅผ ์ดํด๋ณด์ญ์์ค. getDeviceState
๋ ๋น๋๊ธฐ ํจ์์ด๋ฏ๋ก ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ then
.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ด๋ฌํ ์ถฉ๋์ ํผํ๊ธฐ ์ํด SDK์์์ด๋ฅผ ์ฒ๋ฆฌ ํ ์์๋ ์ข์ ๊ธฐํ๊ฐ์๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ํ๋ฉด ์ฒ๋ฆฌํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด๋ฅผ๋ณด๋ค ์ํํ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ณ๊ฒฝํ ์์๋ ์ฌํญ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
์ข ๋ ์์ธํ ์ดํด๋ณด๋ฉด์ด ๋ฌธ์ ์ ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์๋ ์์ธ์ ์ปจํ ์คํธ๊ฐ๋ก๋๋๊ธฐ ์ ์ ์ฅ์น ์ํ๋ฅผ ๊ฐ์ ธ ์ค๋ ค๊ณ ํ๋ ๋ค์ดํฐ๋ธ ์ธก ๋๋ฌธ์ธ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
if (appContext == null) {
logger.error("OneSignal.initWithContext has not been called. Could not get OSDeviceState");
return null;
}
ํ์ธํ๋ ค๋ฉด ๊ธฐ๋ณธ logcat์์ OneSignal.initWithContext has not been called. Could not get OSDeviceState
๋ฅผ ์ฐพ์ผ์ญ์์ค (์ : Android Studio ์ด๊ธฐ).
๊ทธ๋์ Android ๋ธ๋ฆฌ์ง์ ๊ฒ์ฌ๋ฅผ ์ถ๊ฐํ์ฌ ์ถฉ๋์ ์ ์ฒด๋ฅผ ๋ฐฉ์ง ํ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด์จ๋ ๋ค์ ์ฌํญ์ ์ ์ํ์ญ์์ค.
์ฅ์น ์ํ๋ฅผ ๋๋ฌด ์ผ์ฐ ๊ฐ์ ธ ์ค์ง ์๋๋ก ๊ตฌ๋
๋ณ๊ฒฝ ๊ด์ฐฐ์๋ฅผ ํตํด์๋ง ์ฅ์น ์ํ๋ฅผ ๊ฐ์ ธ ์ค๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ํด ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
# 1085์์ :
ํ์ด๋จธ๋ฅผ ํตํด ์ฅ์น ์ํ getter๋ฅผ ์ง์ฐํ๋ ๋์ ๊ตฌ๋
๊ด์ฐฐ์์ getDeviceState
ํจ์ ํธ์ถ์ ๋ฃ์ด๋ณด์ญ์์ค. ์ด๋ ๊ฒํ๋ฉด ๊ตฌ๋
๋์์์ ์ ์ ์์ต๋๋ค. ์ :
OneSignal.addSubscriptionObserver(async (event) => {
this.OSLog("OneSignal: subscription changed:", event);
if (event.to.isSubscribed) {
const state = await OneSignal.getDeviceState();
// do something with the device state
}
});
์ ๋ฐ์ดํธ : ์ด์ ์ต์ ๋ฒ์ 4.0.7์์ ์์ ๋์์ต๋๋ค.
์ต์ 4.0.7 ์ ์ฅ์๋ก ์ ๋ฐ์ดํธํ์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์ฅ์์์ ๋ฌผ์ด๋ณด๊ณ ์๋์ง ํ์คํ์ง ์์ง๋ง ์ผ๋ถ iOS ์๋ฎฌ๋ ์ดํฐ ๋ฐ Android ์ฅ์น์์๋ ์๋ฅผ ๋ค์ด ์ด์ ๊ฐ์ deviceState๋ก ์ด๋ฌํ ํ๋ ๋ง ๊ฐ์ ธ์ต๋๋ค. userId ํ๋๋ ์์ต๋๋ค.
{"rootTag":21,"initialProps":{}}
WARN {"hasNotificationPermission": false, "isEmailSubscribed": false, "isPushDisabled": false, "isSMSSubscribed": false, "isSubscribed": false, "notificationPermissionStatus": 0}
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ ๊ณ ๋ง์