스윙투앱 도움말
문의하기앱 제작하기
  • 스윙투앱
  • 스윙투앱 이용 안내
  • [웹앱] 스윙투앱 강점
  • [일반앱] 스윙투앱 강점
  • 스토어 유지보수
  • 커스터마이징(앱개발 서비스)
  • 스윙투앱 업데이트
  • 스윙투앱 업데이트 히스토리
  • 자주 묻는 질문 FAQ
    • 가장 많이 묻는 질문 FAQ
    • 앱제작 FAQ
    • 앱운영 및 기능 FAQ
    • 앱 설치 및 다운로드 FAQ
    • 결제/이용권 FAQ
      • 일반 결제 문의 FAQ
      • 구독형 이용권 FAQ
      • 무제한 이용권 FAQ
      • 업로드티켓 FAQ
      • 패키지상품 FAQ
      • 플러그인 상품 FAQ
    • 푸시 발송 관련 FAQ
    • 플레이스토어 FAQ
    • 앱스토어 FAQ
    • 애드몹 FAQ
    • 제휴프로그램 FAQ
    • 커스터마이징 관련 FAQ
    • 스윙샵(스윙쇼핑몰) FAQ
    • 계정-회원가입,로그인 FAQ
    • 앱 미리보기 FAQ
    • 스토어 유지보수 컨설팅 FAQ
    • 구글플레이 개발자 계정 FAQ
  • 일반프로토타입 앱 매뉴얼
    • 앱제작 매뉴얼(V3)
      • V3 앱제작 마법사 시작
      • V3버전 앱제작 방법 매뉴얼
      • STEP1 기본정보
        • 앱아이콘 이미지 제작 가이드
        • 대기화면 이미지 제작 가이드
      • STEP2 디자인
      • STEP3 페이지
        • 앱 홈화면 제작방법
        • 메뉴 아이콘 이미지 등록하기
        • 앱 메뉴 비활성화 이용방법
        • 메뉴 권한 설정: 접근 권한
        • 페이지 기능 - UI KIT
        • 페이지 기능 - 쇼핑몰 기능 페이지
        • 페이지 기능 - 쇼핑몰 상품
        • 페이지 기능 - 상품카테고리
        • 페이지 기능 - 업종별 템플릿
        • 페이지 기능 - 이미지 페이지
        • 페이지 기능 - HTML에디터 페이지
        • 페이지 기능 - 회원가입, 로그인, 설정
        • 페이지 기능 - 게시물 검색
        • 페이지 기능 - 관심글 보기
        • 페이지 기능 - 쿠폰조회하기
        • 페이지 기능 - 앱공유하기
        • 페이지 기능 - 앱소개
        • 페이지 기능 - 관리자 채팅
        • 페이지 기능 - 채팅목록
        • 페이지 기능 - 설문조사
        • 페이지 기능 - 나의 글 보기
        • 페이지 기능 - 출석체크
        • 페이지 기능 - 링크
      • STEP4 앱제작하기
        • 앱 추가 제작방법
        • 앱 업데이트 방법
        • 업데이트 유형별 앱 실행화면
        • 디바이스 모드 설정(앱 화면 전환)
        • 앱 리뷰 버튼
        • 앱 로딩 아이콘 변경
      • 앱 업데이트 방법
    • 앱제작 메뉴얼(V2)
      • 앱 기본정보
        • 앱제작 방법 매뉴얼
        • 앱 업데이트 방법
        • 푸시, 웹뷰버전 앱제작방법(초간단 앱제작)
        • 웹뷰앱 매뉴얼(제작 및 운영)
        • 푸시앱 매뉴얼(제작 및 운영)
        • 푸시앱 툴바 제거
        • 업데이트 유형별 앱 실행화면
        • 앱 추가제작
        • 앱아이콘 이미지 제작 가이드
        • 대기화면 이미지 제작 가이드
        • 앱 이미지 사이즈 편집도구
      • 디자인테마
        • 프로토타입 UI디자인
        • 앱 메인 디자인 스타일
        • 앱 내비게이션 스타일
        • 슬라이드 프로토타입 응용
      • 페이지메뉴
        • 페이지메뉴-메인메뉴 관리
        • 앱 홈화면 제작방법
        • 홈화면:앱소개 페이지 적용하기
        • 웹링크 메뉴 이용방법
        • 파일 첨부 이용방법
        • 이미지 첨부 이용방법
        • 웹링크 링크마법사 이용방법
        • 상품카테고리 이용방법
        • 사용자페이지 이용방법
        • 사용자 페이지- 이미지 페이지
        • 사용자 페이지- 웹 템플릿 페이지
        • 사용자 페이지- HTML에디터 페이지
        • 스윙 페이지 - 회원가입, 로그인, 설정
        • 스윙페이지 - 게시물 검색 기능
        • 스윙페이지 - 관심글보기 이용방법
        • 스윙페이지 - 쿠폰조회하기
        • 스윙페이지 - 앱공유하기
        • 스윙페이지 - 앱소개
        • 스윙페이지 - 관리자채팅
        • 스윙페이지 - 채팅목록
        • 스윙페이지 - 설문조사
        • 스윙페이지 - 나의글보기 이용방법
    • 앱제작 응용 TIP(V2)
      • 푸시 API를 이용하여 푸시 발송하기
      • 홈화면 GIF이미지 넣기
      • 플래시 스타일 홈화면 만들기
      • 앱 로딩 아이콘 변경하기
      • 디바이스 모드 설정(앱 화면 전환)
      • 앱 리뷰 버튼 이용방법
      • 카카오톡 앱공유-앱 셋팅 방법
    • 앱운영 매뉴얼
      • 내 메뉴
        • 앱 활동 모음
        • 앱 제거(삭제)방법
        • 내 정보 수정
      • 게시판관리
        • 게시판 만들기
        • 게시판 종류, 디자인스타일
        • 게시판 날짜 형식 설정 방법
        • 게시판 - 게시물 입력방법
        • 게시판 - 게시물 예약 설정
        • 게시판 고급설정 - 게시물 상세 옵션 설정
        • 게시물 정렬 순서 설정 방법
        • 게시판 - 파일 첨부하기 (관리자용)
        • 앱에서 게시판 파일 첨부하기
        • 게시판 - 동영상 등록하기(영상 등록방법)
        • 게시판-오디오파일 첨부방법
        • 게시물 댓글, 대댓글 입력방법
        • 게시판 권한 설정 이용방법
        • 게시판 작성폼 이용방법
        • 게시판 작성글 이용방법
        • 게시판: 목록화면, 작성화면 이용방법
        • 게시판 새글알람 설정방법
        • 게시판 관리자 설정
        • 위치등록(지도)게시판
        • 위치등록(지도)게시판 버튼명 수정
        • 위치등록(지도)게시판 고급설정
        • 구글맵(구글지도)게시판
        • 구글맵 API키 발급하기
        • HTML에디터글쓰기
        • 게시물 신고 및 관리
        • 게시물 차단하기
        • 회원등급별 게시판 만들기
        • 게시판 섬네일 이미지 등록
        • 게시물 검색 기능
        • 게시물관리 옵션 기능
        • 일괄등록 게시판 이용방법
        • 복합게시판
        • 게시판 복사
        • 게시물 복사
        • 게시물 이동
        • 게시물 일괄 삭제
        • 그룹채팅
        • 그룹채팅 기능 소개
        • 비밀게시판 만들기(1:1 고객센터)
        • 게시물 링크 생성하기
        • 캘린더 이용방법
        • 캘린더 응용-활용방법
        • 스탬프 이용 및 등록방법
        • 스탬프 응용: 스탬프 완료시 쿠폰발행하기
        • 게시판 헤더 이용방법
        • 해시태그 2가지 이용방법
        • 해시태그 검색옵션 이용방법1
        • 해시태그 검색옵션 이용방법2
        • 게시글 다운받기(게시물 다운)
      • 서비스관리
        • 팝업 이용방법
        • 출석체크
        • 설문조사
        • 리소스관리- 용량관리
        • 쿠폰관리: 쿠폰만들기, 발행하기
        • 관리자채팅 [1:1 채팅] 이용방법
        • 채팅 관리자 페이지 (웹 대시보드용)
        • 채팅 관리자 페이지 - 채팅설정
        • 통합 알림 설정
        • 앱 정책관리 - 앱 가입 정책
        • 앱 정책관리 - 회원가입 양식
        • 회원가입 양식 - 아이디 설정
        • 회원가입 양식 - 외부 로그인 연동
        • 회원가입 양식 - 가입 항목 추가하기
        • 앱 정책관리- 회원가입 완료 메시지 설정
        • 앱 이용약관, 개인정보취급방침
        • 비공개 앱만들기
        • 앱 등록 기기수
        • 앱 고급 관리
        • 안드로이드 앱 패키지 아이디 변경
        • API-KEY 관리 페이지
        • 앱 문자열 관리
        • 엡에 셋팅된 문구(메시지) 수정 방법
        • 앱 신고 관리
        • 앱스토어 리뷰 관리
        • 애드몹 플러그인 설정
        • 링크마법사
        • 접근 권한 제어
        • 브랜드관리 - 라벨 사용
      • 푸시&회원 메뉴
        • 푸시 발송하기
        • SMS 발송 이용방법
        • 푸시 알림 방식 확인
        • 게시물 푸시발송하기
        • 푸시 알림 확인 후 메시지 표시
        • 푸시 알림 이용방법
        • 푸시 히스토리
        • 푸시 아이콘 이미지 가이드라인
        • 푸시 아이콘 이미지 등록
        • 아이폰 푸시 인증서 연장
        • 회원조회 - 회원정보 확인
        • 회원조회 - 부관리자 설정 및 로그인 방법
        • 회원조회 - 회원 생성하기
        • 회원 이름 변경 *관리자 권한 변경
        • 앱 관리자 설정하기
        • 권한그룹설정 - 회원 등급
        • 푸시 장치 관리
      • 통계
      • 버전관리
        • 버전관리- 앱제작이력, 마켓등록기록, 마켓등록관리
        • 앱스토어 업로드 신청방법
        • 플레이스토어 업로드 신청방법
        • 모바일웹 업로드 신청방법
      • 결제, 유료 상품
        • 결제- 내 결제현황 이용방법
        • 1,000건 SMS 발송 티켓 이용방법
        • 모바일웹 이용방법
        • 웹뷰 무제한 유료앱
        • 푸시 무제한 유료앱
        • 알뜰형 패키지(12개월)
        • 애드몹 파워 패키지(12개월)
        • 대용량 패키지(12개월)
        • 결제-쿠폰사용하기
        • 세금계산서, 현금영수증 발행요청하기
        • 유료상품 취소 및 환불 정책
      • 전체검색기능
  • 스윙샵 - 쇼핑몰 기능
    • 스윙샵-스윙쇼핑몰
      • 스윙샵(스윙 쇼핑몰) 신청방법
      • 스윙샵 상품유형
      • 스윙샵에서 제공하는 페이지 소개
      • 쇼핑몰 앱 홈화면 구성방법
      • 스윙샵-쇼핑몰앱 결제화면
      • 스윙샵-쇼핑몰 메인페이지 이용방법
      • 스윙샵-쇼핑몰 메인페이지 이미지 슬라이드
      • 상점관리-결제모듈관리
      • 상점관리-결제수단별 실행화면
      • 상점관리-기본정보설정
      • 상점관리-배송관리
      • 상점관리-정책설정하기
      • 상품등록-상품카테고리 등록
      • 상품등록-실물 상품 등록
      • 상품등록-상품수령방법 설정하기
      • 상품등록-디지털제품: 권한 변경 상품
      • 상품등록-디지털제품: PDF파일 등록
      • 상품등록-디지털제품: 영상파일 등록
      • 상품등록-디지털제품: 쿠폰 등록
      • 상품등록-예약시스템 날짜 예약상품 등록
      • 상품등록-예약시스템 시간 예약상품 등록
      • 상품수정-등록한 상품 수정하기
      • 상품관리-상품게시물관리
      • 상품관리-상품조회, 예약상품조회
      • 상품관리-상품노출관리
      • 주문관리 이용방법
      • 예약주문관리 이용방법
      • 상점통계 이용방법
      • 스윙페이지-쇼핑몰정보
      • 스윙페이지-상품검색
      • 스윙페이지-카테고리 리스트
      • 스윙페이지-마이페이지
      • 스윙페이지-장바구니
      • 스윙페이지-디지털상품 구매완료 페이지
  • 웹앱-웹뷰,푸시앱 매뉴얼
    • 웹뷰앱&푸시앱
      • 스윙투앱 웹뷰앱
      • 스윙투앱 푸시앱
      • 웹뷰앱 매뉴얼
      • 푸시앱 매뉴얼
      • 푸시앱, 웹뷰앱 초간단 제작방법
      • 최초 실행 주소 이용방법
      • 기본 옵션: 웹뷰 기능
      • 기본 옵션: 안드로이드 권한
      • 기본 옵션: 추가 기능(푸시앱)
      • 고급 옵션: 색상 설정(푸시앱)
      • 고급 옵션: 시스템 폰트
      • 프로그레스바 색상 설정
      • 프로그레스바 제거(사용하지 않음)
      • 앱 종료 알림 메시지
      • 권한 유형 설정
      • 부관리자 설정(푸시,웹뷰앱)
      • 안드로이드 앱 패키지 아이디 변경
      • 푸시앱 [툴바] 이용방법 및 기능 소개
      • 푸시앱 [메뉴] 리스트 수정 방법
      • 푸시 아이콘 이미지 등록하기
      • 푸시앱에서 푸시발송하기
      • 푸시테스트발송 - 푸시 장치 관리
      • [푸시앱] App Id, App Key
  • 앱 이용 가이드
    • 스윙투앱 브라우저 앱 이용방법
    • 어플리케이션 운영
      • 유료앱 전환 및 스토어 업로드 신청방법
      • 미리보기 이용방법
      • APK파일 받기 (앱 다운)
      • AAB파일 받기
      • 공유하기로 앱 설치하는 방법
      • 앱 설치 링크주소로 앱 다운받기
      • 모바일 스윙투앱 사이트 접속 후 앱 다운받기
      • 무료버전앱(APK파일) 설치가 안된다면 확인해주세요!
      • 유료버전앱(APK파일) 설치가 안된다면 확인해주세요!
      • 유료앱 기간 종료 후 무료앱 전환방법
      • 앱 비밀번호 찾기
      • 앱 프로필 사진 등록 및 변경하기
      • 앱 회원탈퇴 후 동일 아이디 재가입 방법
      • 게시판, 게시물 공유하기
      • 앱 관리자 메뉴 :관리자 로그인
      • 앱 관리자메뉴:채팅
      • 앱 관리자메뉴:스탬프 등록
      • 앱 관리자메뉴:쿠폰사용
    • 앱 미리보기 이용방법
  • 프로그램 및 컨설팅
    • 제휴프로그램
      • 제휴프로그램 소개
      • 제휴프로그램 신청방법
      • 제휴프로그램 약관
      • 제휴프로그램 홍보방법
    • 타사 앱 서비스 이전 문의
  • 스토어
    • 스토어 이용약관
      • 플레이스토어 업로드 대행 약관
      • 앱스토어 업로드 대행 약관
      • 플레이스토어 등록 불가 앱(컨텐츠, 업종)
      • 앱스토어 등록 불가 앱(컨텐츠, 업종)
      • 앱스토어, 플레이스토어 등록 주의사항
      • 애플 개발자 계정 대리 등록 주의사항
      • 앱스토어 주요 정책 이슈
      • 플레이스토어 주요 정책 이슈
    • 개발자 계정 자주 묻는 질문
      • 구글 개발자계정 자주 묻는 질문
      • 애플-앱스토어 자주 묻는 질문
      • 구글 개발자 계정 생성 방법
      • 애플 개발자 계정 생성 방법
      • 애플 개발자 계정 갱신(멤버십 연장)
    • 플레이스토어
      • 구글 플레이 정책
        • 민감한 권한 API: 쿼리 권한 정책
        • 앱 액세스 권한
        • 사용자 제작 콘텐츠(UGC)
        • 데이터 보안
        • 아동 안전 표준 정책
        • 개인정보 링크 연결하기
        • 플레이스토어 사전고지 문서(증빙서류)
      • 비공개 테스트
        • 비공개 테스트 등록
        • 비공개 테스트 승인 완료 프로덕션 출시
        • 비공개 테스트 가이드 및 주의사항
        • 비공개 테스트 FAQ
      • 플레이스토어 앱 등록 매뉴얼
      • 플레이스토어 앱 업데이트
      • 구글 개발자-개인 계정 만들기
      • 구글 개발자 개인 계정 인증
      • 구글 개발자-조직 계정 만들기
      • 구글 개발자 조직 계정 인증
      • 구글 개발자-조직 웹사이트 인증
      • 구글 개발자 계정 초대
      • 플레이스토어 앱 등록 준비사항
      • 플레이스토어 스크린샷 이미지
      • [웹앱] 플레이스토어 심사 거절 사례
      • 플레이스토어 앱 심사 거절 사례
      • 플레이스토어 앱 출시 링크 확인 방법 ​
      • 플레이스토어 앱 게시취소
      • 구글 플레이 개발자 이름 변경
      • 구글 플레이 개발자 연락처 정보 변경
      • 구글 개발자 거래 ID 확인
      • 다른 개발자계정으로 앱 이전하기
      • 플레이스토어 앱 검색 TIP
      • 플레이스토어 앱 설치수 확인하기
      • 플레이스토어 개발자 페이지
      • 플레이스토어 출시 후 관리 페이지
      • 플레이스토어 출시된 앱 업데이트 받는 방법
      • 플레이스토어 앱 자동업데이트 설정하기
      • 플레이스토어 이의제기(앱 복원방법)
      • 플레이스토어 앱 리뷰에 답글 달기
      • Google Play Console 지원팀 문의하기
      • 구글 플레이 개발자 계정 인증 기한 선택
      • 구글 개발자 계정 확인 기한 '개인' 계정 인증
      • 구글 개발자 계정 확인 기한 '조직' 계정 인증
      • 플레이스토어 등록된 앱 삭제
      • 플레이스토어 운영 가이드
      • 구글 계정 만들기
      • 구글 플레이 개발자 계정 환불
    • 앱스토어
      • 앱스토어 애플 개발자계정 등록(개인)
      • 앱스토어 애플 개발자계정 등록(기업)
      • 애플 개발자 계정 멤버십 연장(갱신)방법
      • 앱스토어 앱 등록 준비사항
      • 앱스토어 스크린샷 이미지
      • 앱스토어 업로드 신청방법
      • 앱스토어 앱 심사 거절 대표 사례
      • [웹앱] 앱스토어 앱 심사거절 사례
      • 아이폰 푸시 인증서 연장
      • TestFlight 앱출시 방법
      • TestFlight 앱 연장방법
      • Apple Developer Enterprise Program
      • 애플 개발자 계약 업데이트
      • 앱스토어 API 인증서 등록하기
      • 앱스토어 아이폰 푸시 인증서 등록
      • 애플 앱스토어 고객센터 이용방법
      • 앱스토어 앱 출시 링크 확인하는 방법
      • 앱스토어 앱 이전
      • 앱스토어 출시된 앱 삭제하기
      • 앱스토어 앱설치수 확인하기
      • 앱스토어 리뷰/ 평점 관리
      • 앱스토어 출시 후 관리 페이지
      • 앱스토어 '디지털 서비스법 규정' 조치방법 안내
      • 애플 계정 만들기
      • Apple Developer Enterprise Program
    • 원스토어
      • 원스토어 앱 등록 방법
      • 원스토어 앱 업데이트하기
      • 원스토어 출시된 앱 판매중지하기
    • 갤럭시스토어
      • 갤럭시스토어 앱 등록 및 출시
      • 갤럭시스토어 앱 업데이트하기
    • 애드몹(구글 애드몹 광고)
      • 애드몹 플러그인 설정이란?
      • 애드몹 예상 수익 계산기
      • 애드몹 가입방법, 광고단위 아이디 만들기
      • 애드몹 플러그인 광고 셋팅
      • 애드몹 - 테스트 아이디 설정
      • 애드몹 - 광고 노출 권한 설정
      • 애드몹 배너광고 노출빈도 설정
      • 애드몹 - app-ads.txt 파일 설정하기
      • 애드몹-스윙투앱 계정 초대하기
      • 애드몹 운영 주의사항
      • 애드몹 광고 셋팅 주의사항
      • 앱미리보기 이용방법
    • 인앱(In-App)
      • 인앱(In-app)이란?
      • 인앱 주의사항
      • [구글] 결제 프로필 설정 방법
      • [구글] 플레이스토어 인앱 상품 등록
      • [구글] 플레이스토어 인앱 환불, 취소
      • [구글] 인앱 판매자 계좌정보 입력
      • [애플] 은행 계좌 등록 및 수정방법
      • [애플] 앱스토어 인앱 상품 등록
  • 개발자 문서
    • AppLink 연동
      • 안드로이드 AppLink 연동하기
      • iOS앱 Universal Links 적용하기
    • Server Side API 명세서
      • 푸시 API를 이용하여 푸시 발송하기
      • 푸시알림 목록 가져오기
      • 푸시알림 읽지 않은 메시지 Count
      • 푸시알림 읽음처리 API
    • 웹뷰(웹뷰,푸시전용) 개발도구
      • 웹뷰에서 구글, 페이스북 로그인 구현하기
      • 웹사이트 회원 연동 가이드
        • 워드프레스 웹사이트 회원 연동 가이드
        • Wix 웹사이트 회원 연동 가이드
        • 카페24(Cafe24) 웹사이트 회원 연동 가이드
        • 아임웹 웹사이트 회원 연동 가이드
      • Javascript 웹뷰 API 문서
        • API 를 활용한 예제
        • Meta SDK 활용하기
        • 안드로이드 인앱결제 구현하기
        • iOS 인앱결제 구현하기
    • Firebase 연동
      • Firebase 프로젝트 연동하기(안드로이드)
      • Firebase 프로젝트 연동하기(iOS)
      • Dynamic Links 연동
    • 애플 개발자 계정 등록 프로세스
    • DUNS 번호 발행 방법
    • DUNS 번호 조회방법
    • 네이버 로그인 API 연동
    • 카카오 로그인 API 연동
    • 구글 로그인 API 연동
  • 이용약관
    • 스윙투앱 이용약관
    • 스윙투앱 개인정보 처리방침
    • 스윙투앱 어플리케이션 개인정보 처리방침
    • 스윙투앱 교육용 라이선스
    • 무료앱 설치 기기수 제한
    • 이용제한 이용자 안내
    • 아동 안전 표준 정책
Powered by GitBook
On this page
  • 외부 브라우저 열기 방법으로 구글 및 페이스북 로그인 회피하는 방법 알아보기
  • #실행 프로세스
Edit on GitHub
  1. 개발자 문서
  2. 웹뷰(웹뷰,푸시전용) 개발도구

웹뷰에서 구글, 페이스북 로그인 구현하기

스윙투앱에서 구글, 페이스북 로그인 보안으로 인한 문제 해결하기

Previous웹뷰(웹뷰,푸시전용) 개발도구Next웹사이트 회원 연동 가이드

Last updated 1 year ago


안드로이드 앱 개발 중 구글 및 페이스북과 같은 플랫폼의 로그인 기능을 웹뷰에서 사용하려는 경우, 일반적으로 보안 상의 이유로 인해 구글과 페이스북이 해당 기능을 차단하는 경우가 있습니다.

(아래와 같은 메시지를 발견했다면 해당 이유로 차단된 경우입니다. )

이러한 차단은 앱 사용자의 개인 정보와 계정 보안을 보호하기 위한 조치로 이해해야 합니다.

이 글에서는 User Agent Disallow 이슈에 대해 자세히 알아보고, 이를 회피하기 위한 대안적인 접근 방식을 소개하겠습니다.


  1. User Agent Disallow란 무엇인가요?

    • User Agent는 클라이언트(웹 브라우저 또는 웹뷰)가 서버에게 자신의 속성을 알리기 위해 전송하는 HTTP 헤더입니다.

    • User Agent Disallow는 구글과 페이스북이 자체 로그인 기능을 웹뷰를 통해 사용하는 것을 막기 위해 해당 User Agent 문자열을 감지하여 차단하는 것을 의미합니다.

  2. User Agent Disallow 이슈의 이유는 무엇인가요?

    • 웹뷰는 모바일 앱 안에 내장된 경량화된 웹 브라우저로써, 보안상의 이유로 특정 기능을 차단하는 것이 필요합니다.

    • User Agent Disallow는 보안을 강화하기 위한 방식 중 하나로서, 웹뷰에서는 구글 및 페이스북과 같은 로그인 API를 사용하는 것을 제한하여 악용을 방지합니다.

  3. User Agent Disallow를 회피하는 대안적인 방법은 무엇인가요? 가장 일반적인 방법으로는 다음과 같은 접근 방식을 고려할 수 있습니다:

    a. 외부 브라우저 열기:

    • 사용자가 구글 로그인 또는 페이스북 로그인을 선택하면, 웹뷰에서는 외부 브라우저를 열어 해당 로그인 페이지를 표시합니다.

    • 외부 브라우저는 웹뷰와는 별개의 애플리케이션으로 간주되므로, 보안 정책에 영향을 받지 않습니다.

    • 로그인이 완료되면, 외부 브라우저는 로그인 결과를 콜백 URL을 통해 전달하고, 애플리케이션이 이를 캡처하여 처리할 수 있습니다.

    b. Fake(가짜) UserAgent 사용하기

    • 가짜 UserAgent 를 사용하면 구글 로그인의 경우는 해당 이슈를 회시 할 수 있다. 다만 페이스북은 회피가 불가능하다.

    • 스윙투앱에서 UserAgent 변경방법

    앱 제작 -> 고급 설정 -> 앱 제작 설정 에서 아래의 두개 값 변경

(1) Android WebView UserAgent

-> 구글 로그인 회피 가능한 UserAgent 값 (Android)

"Mozilla/5.0 (Linux; Android 9; SM-G950N) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/88.0.4324.93 Mobile Safari/537.36"

(2) IOS WebView UserAgent

-> 구글 로그인 회피 가능한 UserAgent 값 (iOS)

"Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1"


외부 브라우저 열기 방법으로 구글 및 페이스북 로그인 회피하는 방법 알아보기

#실행 프로세스

(1) 웹뷰에서 login_example.html 을 앱 내 내장 브라우저로 실행한다

login_example.html 실행 예제 코드를 아래에 첨부되었습니다.

login_example.html 실행 파라미터중 customUrl 항목이 있는데 해당 항목은 고급설정에서 설정하실 수 있습니다. 설정된 값을 사용하셔도 됩니다.

*custom url scheme 값은 앱 마다 고유값으로 설정하는 것을 권장드립니다.

실행코드
swingWebViewPlugin.app.methods.openBrowser('https://www.swing2app.co.kr/sns_login_temp/sns_login_temp_ext.html?customUrl=myapp1706');
  • 자세한 브라우저 실행 API 는 아래의 Javascript 연동 API를 참고하세요.

아래의 코드를 활용하여 로그인 페이지를 만들어주세요.

  • 아래의 코드에서 todo 에 기재된 facebook 앱 아이디와 구글 client id 는 반드시 변경후에 사용해야 합니다.

<html>
<head>
    <!-- Title -->
    <title>Swing-test</title>
    <meta content="width=device-width, initial-scale=1" name="viewport">
    <meta charset="UTF-8">
    <!-- Javascripts -->
    <script src="/assets/plugins/jquery/jquery-2.1.4.min.js"></script>
    <script>
        var host = location.host.toLowerCase();
        const urlParams = new URLSearchParams(window.location.search);
        var customUrl = urlParams.get('customUrl');
        var autoType = urlParams.get('autoType');
        $(document).ready(function () {
            window.fbAsyncInit = function() {
                FB.init({
                    appId      : '464485827223968', // todo facebook 앱 아이디를 입력
                    xfbml      : true,
                    version    : 'v9.0'
                });
                FB.AppEvents.logPageView();

                if( autoType == "facebook"){
                    fb_login();
                }
            };

            (function(d, s, id){
                var js, fjs = d.getElementsByTagName(s)[0];
                if (d.getElementById(id)) {return;}
                js = d.createElement(s); js.id = id;
                js.src = "https://connect.facebook.net/en_US/sdk.js";
                fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));
        });

        var googleAuth2 = null;
        function fb_login(){
            $("#infoBox").append("fb_login start");

            FB.login(function(response) {
                if (response.authResponse) {
                    console.log('Welcome!  Fetching your information.... ');
                    var access_token = response.authResponse.accessToken; //get access token
                    if (response.status === 'connected') {   // Logged into your webpage and Facebook.
                        gotoSnsLoginPageFn("facebook", access_token);
                    } else {

                    }
                } else {
                    //user hit cancel button
                    console.log('User cancelled login or did not fully authorize.');
                }
            }, {
                scope: 'public_profile,email'
            });
        }

        function googleInitFn() {
            gapi.load('auth2', function() {
                /* Ready. Make a call to gapi.auth2.init or some other API */
                googleAuth2 = gapi.auth2.init({
                    client_id: '829822048277-oncammdmeq2mku9lbqndknoustamqcbq.apps.googleusercontent.com',  // todo google client_id 입력
                    cookiepolicy: 'single_host_origin',
                    scope: 'profile email'
                });
                attachSignin(document.getElementById('googleLoginBtn'));

                if( autoType == "google" ) {
                    setTimeout(function() {
                        $("#googleLoginBtn")[0].click();
                    },1000);
                }

            });
        }
        function attachSignin(element) {
            console.log(element.id);
            googleAuth2.attachClickHandler(element, {},
                function(googleUser) {
                    var loginAuth2 = gapi.auth2.getAuthInstance();
                    if (loginAuth2.isSignedIn.get()) {
                        var authToken = loginAuth2.currentUser.get().getAuthResponse().id_token;
                        gotoSnsLoginPageFn("google", authToken);
                    }

                }, function(error) {
                    // alert(JSON.stringify(error, undefined, 2));
                });
        }

        function googleLoginActionFn(){
            googleAuth2.signIn().then(function(user){
                if (user.isSignedIn()) {
                    var authToken = user.getAuthResponse().id_token;
                    gotoSnsLoginPageFn("google", authToken);
                }
            });
        }

        function gotoSnsLoginPageFn(idType, token){
            var $form = $("#snsLoginForm");
            $form.find("[name=id_type]").val(idType);
            $form.find("[name=token]").val(token);

            var runUrl = customUrl +'://app?function=command&linkUrl=' + btoa( "loginTokenCallback('"+ token +"','" + idType + "');" );
            $('.return-app-area a').attr('href', runUrl );
            $('.sns-login-area').hide();
            $('.return-app-area').show();


            if( location.href.indexOf('swing2app.com') >= 0 )
            {
                $('.command-button').text('Login successful - Proceed');
            }
            else {
                $('.command-button').text('로그인 성공 - 이동하기');
            }
        }

    </script>

    <meta name="google-signin-client_id" content="829822048277-oncammdmeq2mku9lbqndknoustamqcbq.apps.googleusercontent.com">    <!-- todo google signin-client-id 입력 -->
    <script src="https://apis.google.com/js/platform.js?onload=googleInitFn" async defer></script>

    <script>
    </script>
</head>
<body>

<div class="sns-login-area" style="width: 100%; padding:30px">
    <div class="sns-login-btn-box facebook">
        <div class="sns-login-main-btn" id="snsFaceBookLoginBtn" onclick="fb_login();">
            <span class="icon"><img src="/assets/images/sns_login/facebook.png" /></span>
            <span class="buttonText">페이스북으로 로그인</span>
        </div>
    </div>

    <div class="sns-login-btn-box google">
        <div id="googleLoginBtn" class="customGPlusSignIn sns-login-main-btn">
            <span class="icon"><img src="/assets/images/sns_login/google.png" /></span>
            <span class="buttonText">구글로 로그인</span>
        </div>
    </div>
</div>

<div class="return-app-area" style="display: none;padding: 30px;text-align: center;background: #e6e6e6;"><a href="#" class="command-button" style="color: black;text-decoration: none;font-size: 25px;">로그인 성공 - 이동하기</a>
</div>
<div id="infoBox" style="display: none">
</div>

</body>
</html>

(2) 웹사이트에서 callback 함수를 정의하여 device token 을 받기

1번 브라우저에서 로그인이 완료되면 아래의 정의된 callback 함수로 deviceToken 이 전달된다, idType 값은 login_example.html 정의된 값으로 전달되는데 제공되는 소스에서는 "facebook", "google"로 구분되어 들어오게 되어있다.

사이트내 callback 구현
function loginTokenCallback(token, idType) {
    console.log("token : " + token );
    console.log("idType : " + idType );
}

(3) 전달받은 accessToken 으로 로그인 구현하기

이후에는 전달받은 accessToken 으로 웹사이트내에서 사용자 정보를 가져와 연동 로그인을 구현해주면 된다.

* 아래의 를 참고하여 개발해주세요.

Javascript 웹뷰 API 문서
가이드
Google Login 웹뷰에서 차단
Facebook Login 웹뷰에서 차단
스윙투앱에서 UserAgent 변경방법
custom scheme 확인 및 설정하는 화면