728x90
반응형

앱을 개발하다보니 설정된 내용을 저장할 필요가 있어 async-storage를 사용하게 되었다.

 

React Native 버전이 0.59 이하인 경우 아래와 같이 하면 된다.

 

버전이 0.60 이상인 경우 link를 해주지 않아도 된다.

$ npm install @react-native-community/async-storage
$ react-native link @react-native-community/async-storage

데이터를 불러올 때 예제에서는 async, await 를 사용하는데

 

constructor에서는 사용할 수 없어 componentDidMountasync 함수로 사용했다.

constructor() {
  super();
  this.state = {
    ...,
    isLoading: true,
    ...
  };
}

async componentDidMount () {
  ...
  try {
    const value = await AsyncStorage.getItem('key');
    if (value !== null) {
      const data = JSON.parse(value);
      this.setState(data);
    }
  } finally {
    this.setState({isLoading: false});
  }
  ...
}

storeData = async (value) => {
  try {
    await AsyncStorage.setItem('key', value)
  } catch (e) {
  }
}

isLoading을 넣어준 이유는 데이터를 읽은 후 setState 함수에서 상태를 변경하는데

 

상태가 변경되기 전에 렌더링이 된 후 상태가 변경된 후 다시 렌더링을 되는 것을 막기 위해 추가했다.

 

참고 문헌

  1. https://github.com/react-native-community/async-storage

반응형
728x90
반응형

앱을 배포한 이후에 비정상 종료에 다음과 같은 내용들이 올라왔다.

Caused by: java.lang.ClassNotFoundException:
  at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.java:93)

이를 해결하기 위해 검색한 결과 multidex를 추가하면 해결이 된다는 내용을 보고 추가하기로 했다.

 

기본적인 내용들은 여기에서 보면 된다.

 

AndroidX를 사용하고 있어서 이를 기준으로 내용을 추가했다.

dependencies {
    ...
    implementation "androidx.multidex:multidex:2.0.1"
    ...
}

attachBaseContext 함수를 추가할 때 라이브러리를 임포트해줘야하는데 다음과 같다.

...
import android.content.Context;
import androidx.multidex.MultiDex;
...

public class MainApplication extends Application implements ReactApplication {
  ...
  @Override
  protected void attachBaseContext(Context base) {
     super.attachBaseContext(base);
     MultiDex.install(this);
  }
  ...
}

 

참고 문헌

  1. https://developer.android.com/studio/build/multidex?hl=ko

반응형
728x90
반응형

앱을 릴리즈로 빌드한 다음 실제 기기나 에뮬레이터에서 실행했을 때 충돌(Crash)이 나는 경우가 있다.

 

이럴 땐 어디서 에러가 났는지 확인해야하는데 다음의 명령어로 로그를 확인할 수 있다.

$ adb logcat *:E

이번에 react-native-svg를 적용하면서 앱이 실행과 동시에 죽는 경우가 발생했다.

 

이를 해결하기 위해 위의 명령어로 로그를 살펴보니 다음과 같이 나왔다.

07-01 02:49:52.865 26792 26792 E AndroidRuntime: java.lang.IllegalStateException: java.lang.NoSuchFieldException: fill
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.t.a(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.ad.a(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.t.d(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.j.b(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.j.a(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.t.d(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.j.b(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.j.a(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.t.d(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.j.b(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.j.a(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.t.d(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.x.a(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.x.j(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at com.horcrux.svg.x.onDraw(Unknown Source)
07-01 02:49:52.865 26792 26792 E AndroidRuntime:     at android.view.View.draw(View.java:17185)

progaurd로 난독화를 한 후 찾지 못해서 난 오류로 해당 라이브러리를 난독화에서 제외하면 된다.

 

해결 방법은 android/app/progauard-rules.pro에 다음을 추가하고 빌드하면 된다.

-keep public class com.horcrux.svg.** {*;}

 

참고 문헌

  1. https://github.com/react-native-community/react-native-svg/issues/481

반응형

'React Native' 카테고리의 다른 글

[React Native] Async Storage 사용하기  (0) 2020.01.25
[React Native] MultiDex 추가  (0) 2020.01.25
[React Native] Firebase Analytics 사용  (0) 2020.01.25
[React Native] Webview 사용  (0) 2020.01.25
[React Native] Admob 사용  (0) 2020.01.25
728x90
반응형

앱을 배포한 이후에 사용자가 어떤 행동을 하는지 알고 싶어졌다.

 

그래서 react-native-firebase를 이용하여 수집하기로 했다.

 

yarn으로 설치하거나 다음을 실행하면 된다.

$ npm install --save @react-native-firebase/app
$ react-native link @react-native-firebase/app
$ npm install --save @react-native-firebase/analytics
$ react-native link @react-native-firebase/analytics

코드에 추가하는 방법은 3가지가 있는데 가장 간략한 방법으로 추가했다.

import analytics from '@react-native-firebase/analytics';

// analytics().X

다음의 함수들을 이용하여 로그를 수집할 수 있다.

logEvent
resetAnalyticsData
setAnalyticsCollectionEnabled
setCurrentScreen
setMinimumSessionDuration
setSessionTimeoutDuration
setUserId
setUserProperties
setUserProperty

 

참고 문헌

  1. https://github.com/invertase/react-native-firebase/tree/master/packages/analytics

  2. https://github.com/invertase/react-native-firebase/tree/master/packages/app

  3. https://invertase.io/oss/react-native-firebase/v6/analytics/reference

반응형

'React Native' 카테고리의 다른 글

[React Native] MultiDex 추가  (0) 2020.01.25
[React Native] Firebase 충돌 해결  (0) 2020.01.25
[React Native] Webview 사용  (0) 2020.01.25
[React Native] Admob 사용  (0) 2020.01.25
[React Native] 폰트 추가(2)  (0) 2020.01.25

+ Recent posts