iOS 프로젝트 막힘. 절박함. 용자들 도와주세요~~!

안드로이드 앱을 iOS로 포팅하면서 막힌 부분들

막힌 부분

  1. FCM을 통해 푸시를 받으면 항상 노티가 뜨는데 특정 UIViewController를 실행 중에는 노티가 뜨지 않도록 하는 방법

  2. FCM을 통해 푸시를 받아서 뜨는 노티 알림을 클릭하면 항상 앱 시작 화면으로 진입하는데 특정 UIViewController로 이동되도록 하는 방법

  3. AlarmoFire로 Node 서버에 Int Array를 전달하는 방법 안드로이드 Retrofit으로는 잘 넘어가는 ios에서는 undefined 임

ios코드

//ios
func leaveRoom(ids: [Int], completion: @escaping (Bool) -> Void) {
    let parameters: [String: Any] = [
        "ids": ids
    ]

    Alamofire.request("http://13.112.184.63:3000/sns/message/room",
                      method: .patch,
                      parameters: parameters,
                      encoding: JSONEncoding.default)    // URLEncoder.default 도 마찬가지임
        .response { response in
            if response.error == nil {
                completion(true)
            } else {
                completion(false)
            }
    }
}

node.js 서버 코드

// 서버
router.patch('/message/room', function (req, res, next) {
    const ids = req.query.ids;        // android 잘 됨. ios는 undefined

    snsDao.leaveRoom(ids, function (error, result) {
        if (error) {
            console.log(ids + '의 채팅방 나가기 실패 : ' + error);
            return res
                .status(500)
                .json({result: 'error'})
        }
        console.log(ids + '의 채팅방 나가기 성공');
        return res
            .status(200)
            .send();
    })
});
  1. 날짜 시간대 변환이 잘 안 됨. 서버에 yyyy-MM-dd'T'HH:mm:ss.SSS'Z' 형식의 KST 타임존으로 저장되어 있음
    각 기기의 타임존에 맞게 변환된 시간을 보여 주고 싶은데 변환이 되지 않음
    참고로 안드로이드 쪽에서 사용하는 코드를 첨부함

안드로이드에서 잘 되는 코드

// 안드로이드

SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'", Locale.KOREA);
inputFormat.setTimeZone(TimeZone.getTimeZone("KST"));
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());

try {
    Date date = inputFormat.parse(time);
    textView.setText(outputFormat.format(date));

} catch (ParseException e) {
    textView.setText(time);
}

ios에서 안 되는 코드

서버 시간 그대로 표시됨

// ios
// 포맷터
let inputFormat = DateFormatter()
let outputFormat = DateFormatter()

inputFormat.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
inputFormat.timeZone = TimeZone(abbreviation: "KST")
outputFormat.dateFormat = "yyyy-MM-dd HH:mm"
outputFormat.timeZone = TimeZone.current

// 변환 부분
let date = inputFormat.date(from: post.time)
timeLabel.text = outputFormat.string(from: date!)