---
# System prepended metadata

title: iOS 이벤트 수집

---

# iOS 이벤트 수집

# 버그
delete 업넥스트 비었을때 ispresented = false 주기

# Event API 건의
- 저장
```javascript
{
    event: 'save',
    userId: string,
    page: String,
    componentId: String,
    data: {
        type: String,
        id: int
    },
    timestamp: String
}
```

- 공유
```javascript
{
    event: 'share',
    userId: string,
    page: String,
    componentId: String,
    data: {
        type: String,
        id: int
    },
    timestamp: String
}
```

- 재생 모드 이벤트
```javascript
{
    event: 'repeatOff'/'repeatTrack'/'repeatList'/'shuffle'/'shuffleOff',
    userId: string,
    componentId: String,
    timestamp: String
}
```

- 앱 생명 주기 이벤트
```javascript
{
    event: 'active'/ 'background' / 'terminate',
    userId: string,
    componentId: String,
    timestamp: String
}
```

- 결제 이벤트
```javascript
{
    event: 'membership',
    userId: string,
    componentId: String,
    timestamp: String
}
```


## 화면 전환

#### TabView
- 바인딩 된 tabItemSelection으로 감지
    - didSet 내부에서 처리하면 될 듯

#### NavigationLink
- PUSH의 경우 onAppear 에서 현재 나타난 페이지만
    - linked list로 할 것인가, 아니면 그냥 onAppear 에서 불리는 형태로 할 것인가


### Search

### Transition: onAppear & onDisappear
* linked-list로 구현하려고 했으나 navigation으로 push 될 때 이전 화면에 disappear 가 계속 불리는 바람에 제대로 노드가 구현이 안됨
    * 개선 여지가 있는가?
        * 시간이 있다면...?

* 화면전환을 탭뷰 간 전환 / 각 탭에서 화면 전환 경우를 구분


# 구현된 부분

#### 화면 전환

- appear
- disAppear
- tabViewTransition
    - : 탭에서 화면 전환하는 경우
```json=
{
    event: 'appear' / 'disAppear' / 'tabTransition'
    userId: number,
    page: String,
    componentId: String, // 어느 섹션에서 눌렸는지 정도만?****
    timestamp: String
}
```













#### 현재재생목록에 추가
```javascript
{   
    event: 'addToUpnext',
    userId: string,
    componentId: String,
    trackId: [int],
    timestamp: String
}
```
#### 재생 / 정지 ▶️ ⏸
-> 클릭 이벤트를 없애면 컴포넌트 ID 추가?
```javascript
{
    event: 'play'
    userId: string,
    componentId: string,
    trackId: Int
}
```
current, total이 필요한가?
필요없으면 재생이벤트 하나로 다 커버 가능

```javascript
{
    event: 'stop'
    userId: string,
    componentId: string,
    trackId: Int
}
```

#### 곡 변경 (⏩ / 중간에 변경)
```javascript
{
    event: 'playNow'
    userId: string,
    componentId: string
    trackId: int, 
    targetTrackId: int,
    currentPlayTime: int (sec 단위로), // 슬라이더 위치
    totalPlayTime: int (sec 단위로) // 전체 길이
}
```

#### 현재 재생 목록에서 제거
```javascript
{
    event: 'removeFromUpNext',
    userId: string,
    trackId: [int]
}
```

#### mp3 구매
```javascript
{
    event: 'buyMP3'
    userId: string,
    trackId: int
}
```

#### 좋아요(보관함)
```javascript
{
    event: 'like',
    userId: string,
    page: String,
    componentId: String,
    data: {
        type: String,
        id: int
    },
    timestamp: String
}
```
#### 좋아요 취소(보관함)
```javascript
{
    event: 'unlike',
    userId: string,
    page: String,
    componentId: String,
    data: {
        type: String,
        id: int
    },
    timestamp: String
}
```

#### 플레이리스트에 트랙/앨범/플레이리스트 등록
```javascript
{
    event: 'addToPlaylist',
    userId: string,
    data: {
        type: String (노래, 앨범 등),
        id: Int
    },
    playlistId: Int
}
```
