카샤의 만개시기

HTML SMS 문자 보내기 (feat. =이 보내지지 않는다면?) 본문

Javascript

HTML SMS 문자 보내기 (feat. =이 보내지지 않는다면?)

SKaSha 2020. 7. 21. 10:22

HTML에서 SMS 문자 보내기는 굉장히 쉽게 되어 있다.

다음 스크립트를 a태그의 href 속성에 넣어주거나, javascript를 이용해 location.href = [스크립트]를 적어주면 된다.
(받을 번호는 생략이 가능하다)

안드로이드

sms:받을번호?body=보낼메세지

IOS

sms:받을번호&body=보낼메세지

한번에 사용하려면

'sms:' +(checkMobile() === 'ios' ? '&' : '?') + 'body=' + message

checkMobile 함수는 다음과 같다

function checkMobile() {
    var varUA = navigator.userAgent.toLowerCase(); //userAgent 값 얻기

    if (varUA.indexOf('android') > -1) {    // 안드로이드
        return "android";
    } else if (varUA.indexOf('iphone') > -1 || varUA.indexOf('ipad') > -1 || varUA.indexOf('ipod') > -1 || varUA.indexOf('ios') > -1) {    // IOS
        return "ios";
    } else {    // IOS, 안드로이드 외
        return "other";
    }
}

SMS 메시지에서 = (equals sign)이 보내지지 않는다면?

SMS 메시지를 보낼때 =기호 이후 메시지가 보내지지 않는 문제가 발생했다.
이 문제를 해결하기 위해서 encodeURIComponent, encodeURI, =, ==, %3D, %253D 등 다양한 방법을 시도해 보았지만 해결되지 않았다.

그래서 다양한 디바이스에서 확인해보았다.

IOS
var url = "sms:&body=" + encodeURIComponent("I'm at http://test.com?param=5s8");
location.href = url;

다음과 같이 정상적으로 동작함을 확인할수 있다..!

I'm at http://test.com?param=5s8

Android (특정 디바이스)
var url = "sms:?body=" + encodeURIComponent("I'm at http://test.com?param=5s8");
location.href = url;

하지만 안드로이드의 특정 디바이스에서는 다음과 같이 =이 보내지지 않는 문제가 발생했다.

I'm at http://test.com?param

이 문제는 모든 안드로이드 기기에서 발생하지 않고 특정 디바이스에서 발생된다.
(자세한 확인은 해보지 않았지만 갤럭시 디바이스에서 많이 일어나는 듯 하다.)

해결책

=을 보내지 않는 방법 말고는 사실상 없다.
=이 반드시 포함 되어야 한다면, 링크 단축 서비스를 이용하거나 redirect를 구현하여 사용해야한다...!

Comments