프로젝트

일반

사용자정보

결함 #14018

[3T][Talk][#20982][MO] Kolon Talk_연락처가 2개 이상 등록되어 있는 경우 MO에서 노출되는 연락처와 PC에서 노출되는 연락처 번호가 상이함

박수민이(가) 10일 전에 추가함. 9일 전에 수정됨.

상태:
해결
우선순위:
보통
담당자:
시작시간:
2025-11-06
완료기한:
진척도:

100%

추정시간:
버전:
앱버전:
디바이스:
MO_APP_AOS, MO_APP_iOS
요청자:
OS버전:
심각도:
중대한 결함(Major)

설명

[재현경로]

대화방 > + 버튼 선택 > 2개 이상 등록된 연락처 선택 > 전송
[문제점]

연락처가 2개 이상 등록되어 있는 경우 MO에서 노출되는 연락처와 PC에서 노출되는 연락처 번호가 상이함
[기대결과]

연락처가 동일하게 노출되어야 함


연결된 일감

다음 일감과 관련됨: mKOLON4.0 모바일 앱 고도화 프로젝트 - 결함 #14019: [3T][Talk][#20983][MO] Kolon Talk_연락처가 2개 이상 등록되어 있는 내역 전달 시 AOS/IOS 동작이 상이함해결2025-11-06

이력

#1 조정후이(가) 10일 전에 변경

  • 상태을(를) 신규에서 의견(으)로 변경되었습니다.
  • 담당자을(를) 조경천에서 박수민(으)로 변경되었습니다.

PC의 연락처 노출 정책과 노출 정책을 통일해야 합니다.
연락처는 VCard 포멧을 전달하는 방식으로 구현되어 있으며, Vcard를 생성할 때 또는 조회할 때 어떤 데이터를 취할 것이냐를 통일 시켜야 합니다.
예를 들어 아이폰의 홍길동 연락처에 휴대번호가 010-1111-2222, 010-2222-3333, 집 번호가 02-999-9999가 존재한다고 할때 Vcard 포멧 생성시 어떤 번호만을 취할것이냐의 문제와
화면에 보여줄때 어떤 값을 취할 것이냐를 통일시켜야 합니다. PC 구현로직과의 통일이 필요한 상황입니다.

#2 조정후이(가) 10일 전에 변경

추가 확인 결과 안드로이드, 아이폰의 경우 기기의 연락처 정보 전체를 VCard 포멧으로 변환하여 서버로 전송하고 있습니다. 따라서 보여주는 부분을 PC, 안드로이드, 아이폰 통일하면 될 것 같습니다.

아이폰의 경우 첫번째 전화번호를 취해서 보여주고 있습니다.
case .contact:
// 연락처뷰 추가 후 변경.
if let data = message.content.data(using: .utf8) {
if let contacts = try? CNContactVCardSerialization.contacts(with: data), let contact = contacts.first {
vcardImageView.contentMode = .scaleAspectFill
if let imageData = contact.imageData, contact.imageDataAvailable {
vcardImageView.image = UIImage(data: imageData)
} else {
vcardImageView.image = UIImage(named: "profilePhotoNone")
}
vcardNameLabl.text = "(contact.familyName)(contact.givenName)"

                    var description: String = ""
                    if contact.phoneNumbers.count > 0 {
                        for number in contact.phoneNumbers {
                            if number.label == "_$!<Mobile>!$_" {
                                description.append(contentsOf: number.value.stringValue)
                                break
                            }
                        }
                        if description == "" {
                            if let number = contact.phoneNumbers.first?.value.stringValue {
                                description = number
                            }
                        }
                    }

                    if let email = contact.emailAddresses.first?.value {
                        description.append(contentsOf: "\n")
                        description.append(contentsOf: email as String)
                    }
                    vcardContentLabel.text = description
                    vcardContentLabel.setLineSpacing(lineSpacing: 7, alignment: .left)
                }

#3 조정후이(가) 9일 전에 변경

PC로직을 VCARD의 핸드폰 최초 번호를 찾아 보여주게 되면 해결될 것으로 보여집니다.

#4 조정후이(가) 9일 전에 변경

위의 기존 아이폰 코드를 참조하여 PC도 동일하게 수정하도록 조치 부탁드립니다.

#5 조정후이(가) 9일 전에 변경

PC javascript 로직 - VCARD의 TEL;로 시작하는 전화번호 중 첫번째 번호를 추출하도록 되어 있음.

안드로이드, 아이폰을 이와 동일하게 맞춤.

const parseVCard = (input) => {
const Re1 = /version|fn|title|org|TEL|tel:(.+)$/i;
const Re2 = /[:;]+;([:]+):(.+)$/;
const Re3 = /(START|END)/;
const ReKey = /item\d{1,2}./;
const fields = {};

let prevKey = null;

input.split(/\r|\n|\r\n/).forEach((line) => {
let results;
let key;
try {
if (Re1.test(line)) {
results = line.match(Re1);
key = results[1].toLowerCase();
fields[key] = results[2];
prevKey = null;
} else if (Re3.test(line)) {
prevKey = null;
} else if (Re2.test(line) || ReKey.test(line)) {
results = line.match(Re2);
if (!empty(results)) {
key = results[1].replace(ReKey, '').toLowerCase();

let meta = {};
results[2].split(';')
.map((p, i) => {
const match = p.match(/([a-z]+)=(.*)/i);
if (match) return [match[1], match[2]];
return [TYPE${(i === 0 ? "" : i)}, p];
})
.forEach((p) => {
meta[p[0]] = p[1];
});
if (!fields[key]) fields[key] = [];
fields[key].push({
meta,
value: results[3].split(';')
});
prevKey = key;
}
} else if (prevKey && fields[prevKey] && fields[prevKey][fields[prevKey].length - 1]) {
// 이미지의 경우는 뒤에 계속 붙임
if (!empty(line)) {
_.assign(fields[prevKey][fields[prevKey].length - 1], {
value: prevKey === 'photo' ? ${fields[prevKey][fields[prevKey].length - 1].value}\n${line} :
${fields[prevKey][fields[prevKey].length - 1].value}${line}
});
}
} else {
prevKey = null;
}
} catch(e) {
console.error(e);
prevKey = null;
}
});

return fields;
};

#6 정도영이(가) 9일 전에 변경

현상 및 원인

BEGIN:VCARD
VERSION:2.1
X-PRODID:ez-vcard 0.12.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=EC=A1=B0;=EC=A0=95=ED=9B=84
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=EC=A1=B0=EC=A0=95=ED=9B=84
TEL;TYPE=CELL:01026336512
TEL;TYPE=CELL:01033331234
TEL;TYPE=WORK;TYPE=PREF:01022226666
EMAIL;TYPE=WORK:junghuya@gmail.com
END:VCARD

일 경우 PC처리 방식이 TEL 라인들 중에 젤 처음 나온 01026336512를 표시함

iOS의 경우 type이 CELL인 경우 우선 표시함.

하여 VCARD가
가본값: CELL
BEGIN:VCARD
VERSION:2.1
N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=EC=97=90=EC=9D=B4;;;
FN;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=EC=97=90=EC=9D=B4
TEL;WORK:01012345678
TEL;CELL;PREF:01000001111
END:VCARD

일 경우 PC : 01012345678, Android :010000001111 를 표시하여 상이함.

대책 : PC기준으로 안드로이드(CELL type우선 표시 조건삭제), 아이폰 표시 처리 맞춤.

#7 정도영이(가) 9일 전에 변경

  • 상태을(를) 의견에서 해결(으)로 변경되었습니다.
  • 담당자을(를) 박수민에서 정인명(으)로 변경되었습니다.
  • 진척도을(를) 0에서 100(으)로 변경되었습니다.

#8 정도영이(가) 9일 전에 변경

  • 다음 일감과 관련됨:결함 #14019: [3T][Talk][#20983][MO] Kolon Talk_연락처가 2개 이상 등록되어 있는 내역 전달 시 AOS/IOS 동작이 상이함이(가) 추가되었습니다.

내보내기 Atom PDF