์ค๋ช
:
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ. Android์์ onOpened/onReceived ์ด๋ฒคํธ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ฎฌ๋ ์ดํฐ์ ์ค์ ์ฅ์น์ ๋์์ ๋ค๋ฅด์ง๋ง ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ ํํ ํธ์ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ฉ๋๋ค.
์๋ฎฌ๋ ์ดํฐ์์:
์ค์ ๊ธฐ๊ธฐ์์:
ํ๊ฒฝ
๋ฌธ์ ์ฌํ ๋จ๊ณ:
ํ์ฌ์ ์ ๋ขฐ ์ ์ฑ
์ผ๋ก ์ธํด ์ฌํ ๋จ๊ณ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ธฐํ:
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-native bundle
๋ฅผ ํธ์ถํฉ๋๋ค.apply from: "../../node_modules/react-native/react.gradle"
๋ผ์ธ.project.ext.react = [
cliPath: "node_modules/haul/bin/cli.js"
]
์ ์ฉ: "../../node_modules/react-native/react.gradle"
/**
/**
์๋๋ก์ด๋ {
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`
์๋๋ก์ด๋:targetSdkVersion="22" />
์๋๋ก์ด๋: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') // ์ค์ ์ฅ์น์ ๋ํ ํ
์คํธ์ฉ
}
```
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์์ ์ฑ์ ๋ ๋ฒ์งธ๋ก ์ด ๋ ๋ฐ์ํ์ง ์์ต๋๋ค.
๊ธฐ์กด ์ด๋ฒคํธ๋ ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค(ํ์ฌ ๋ฒ ํ ๋ฒ์ )์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋ฒ ํ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ๋ฌธ์ ๋ฅผ ์ฌํํด ๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฌธ์ ๊ฐ ์ง์๋๋ฉด ์ ๋ฌธ์ ๋ฅผ ์ด์ด ์๋ ค์ฃผ์ญ์์ค.
๊ฑด๋ฐฐ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@sofianegargouri ์ฌ๊ธฐ PR์ด ์์ต๋๋ค: https://github.com/geektimecoil/react-native-onesignal/pull/592
์ฐ๋ฆฌ๋ ๋ด์ผ์ด๋ ๋ชจ๋ ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐํํ ๊ฒ์ ๋๋ค.