웹사이트 검색

Python을 사용하여 GCM을 사용하여 Android 장치에 푸시 알림을 보내는 서버를 만드는 방법


소개

푸시 알림을 사용하면 사용자가 앱을 사용하지 않는 경우에도 Android 애플리케이션에서 사용자에게 이벤트를 알릴 수 있습니다. 이 자습서의 목표는 앱에 간단한 푸시 알림을 보내는 것입니다. 서버에서 Ubuntu 14.04 및 Python 2.7을 사용하고 푸시 알림 서비스로 Google Cloud Messaging을 사용합니다.

서버라는 용어를 사용하여 DigitalOcean으로 스핀업된 인스턴스를 나타냅니다. GCM을 사용하여 Android 기기와 서버 사이에 있는 Google 서버를 참조합니다.

전제 조건

튜토리얼을 시작하기 전에 다음이 필요합니다.

  • Android 애플리케이션 developer.android.com 참조
  • 우분투 14.04 물방울
  • Droplet의 IP 주소

푸시 알림 정보

Google에서 제공하는 GCM 연결 서버는 Droplet과 같은 타사 애플리케이션 서버에서 메시지를 가져와 기기에서 실행되는 GCM 지원 Android 애플리케이션(클라이언트 앱)으로 보냅니다. 현재 Google은 HTTP 및 XMPP용 연결 서버를 제공합니다.

즉, 알림을 보내기 위해 Google 서버와 통신하려면 자체 서버가 필요합니다. 서버가 GCM(Google Cloud Messaging) 연결 서버에 메시지를 보낸 다음 연결 서버가 메시지를 대기열에 넣고 저장한 다음 장치가 온라인 상태일 때 Android 장치로 보냅니다.

1단계 — Google API 프로젝트 생성

앱에 GCM을 사용하려면 Google API 프로젝트를 만들어야 합니다.

Google 개발자 콘솔을 방문하십시오.

개발자 계정을 생성한 적이 없다면 몇 가지 세부 정보를 입력해야 할 수 있습니다.

프로젝트 만들기를 클릭합니다.

프로젝트 이름을 입력한 다음 만들기를 클릭합니다.

새 프로젝트가 생성될 때까지 몇 초간 기다립니다. 그런 다음 프로젝트 페이지의 왼쪽 상단에서 프로젝트 ID와 프로젝트 번호를 확인합니다.

프로젝트 번호를 기록해 둡니다. Android 앱 클라이언트에서 사용하게 됩니다.

2단계 - 프로젝트에 GCM 활성화

Google Developers Console에서 프로젝트가 여전히 선택되어 있는지 확인하세요.

왼쪽 사이드바에서 API 및 인증을 선택합니다.

API를 선택합니다.

표시된 API 목록에서 Android용 Google Cloud Messaging 토글을 ON으로 전환합니다. 서비스 약관에 동의합니다.

이제 Android용 Google Cloud Messaging이 이 프로젝트에 대해 활성화된 API 목록에 있어야 합니다.

왼쪽 사이드바에서 API 및 인증을 선택합니다.

자격 증명을 선택합니다.

공용 API 액세스에서 새 키 만들기를 클릭합니다.

서버 키를 선택합니다.

서버의 IP 주소를 입력합니다.

만들기를 클릭합니다.

API 키를 복사합니다. 나중에 서버에 이 정보를 입력해야 합니다.

3단계 - Android 앱 연결

알림을 테스트하려면 Android 앱을 만든 Google API 프로젝트에 연결해야 합니다.

Android 앱 개발이 처음인 경우 GCM 클라이언트 구현에 대한 공식 가이드를 따르는 것이 좋습니다.

gcm 페이지에서 공식 소스 코드를 얻을 수 있습니다.

소스는 업데이트가 아니므로 Gradle 파일을 수정해야 합니다.

gcm-client/GcmClient/build.gradle

기존 라인:

compile "com.google.android.gms:play-services:4.0.+"

업데이트된 줄:

compile "com.google.android.gms:play-services:5.0.89+"

기본 활동에서 다음 줄을 찾습니다.

String SENDER_ID = "YOUR_PROJECT_NUMBER_HERE";

이를 Google API 프로젝트의 프로젝트 번호로 바꿉니다.

장치가 GCM에 등록할 때마다 등록 ID를 받습니다. 서버를 테스트하려면 이 등록 ID가 필요합니다. 쉽게 얻으려면 기본 파일에서 다음 행을 수정하십시오.

            if (regid.isEmpty()) {
                registerInBackground();
            }else{
                Log.e("==========================","=========================");
                Log.e("regid",regid);
                Log.e("==========================","=========================");
            }

앱을 실행한 후 logcat을 살펴보고 나중에 사용할 수 있도록 regid를 복사합니다. 다음과 같이 표시됩니다.

=======================================
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UJY0KNqpL4EUXTWOm0RxccxpMk
10-04 17:21:07.102    7550-7550/com.pushnotificationsapp.app E/==========================﹕ =======================================

4단계 - 드롭릿 배포

새로운 Ubuntu 14.04 서버를 배포합니다. 타사 애플리케이션 서버로 사용하려면 이것이 필요합니다.

Google의 GCM 연결 서버는 타사 애플리케이션 서버(Droplet)에서 메시지를 가져와 Android 기기의 애플리케이션으로 보냅니다. Google은 HTTP 및 CCS(XMPP)용 연결 서버를 제공하지만 이 자습서에서는 HTTP에 중점을 둡니다. HTTP 서버는 다운스트림 전용입니다(클라우드-디바이스). 즉, 서버에서 장치로만 메시지를 보낼 수 있습니다.

우리 서버의 역할:

  • 고객과 소통
  • 올바른 형식의 요청을 GCM 서버로 보냅니다.
  • 요청을 처리하고 필요에 따라 지수 백오프를 사용하여 다시 보냅니다.
  • API 키와 클라이언트 등록 ID를 저장합니다. API 키는 메시지를 보내는 POST 요청의 헤더에 포함됩니다.
  • 보내는 각 메시지를 고유하게 식별하기 위해 메시지 ID를 생성합니다. 메시지 ID는 발신자 ID별로 고유해야 합니다.

클라이언트는 장치의 등록 ID를 전송하여 저장하고 알림을 보낼 때 사용할 장치의 등록 ID를 전송하여 서버와 통신합니다. 관리에 대해 지금 걱정하지 마십시오. 매우 간단하며 GCM은 등록 ID가 유효하지 않은 경우 오류 메시지를 제공하여 도움을 제공합니다.

5단계 - Python GCM 단순 서버 설정

sudo 사용자로 서버에 로그인하십시오.

패키지 목록 업데이트:

sudo apt-get update

Python 패키지를 설치합니다.

sudo apt-get install python-pip python-dev build-essential

python-gcm을 설치합니다. 여기에서 python-gcm에 대해 자세히 알아보세요.

sudo pip install python-gcm

서버 어딘가에 새 Python 파일을 만듭니다. 의 말을하자:

sudo nano ~/test_push.py

파일에 다음 정보를 추가합니다. 빨간색으로 표시된 변수를 교체합니다. 설명은 아래와 같습니다.

from gcm import *

gcm = GCM("AIzaSyDejSxmynqJzzBdyrCS-IqMhp0BxiGWL1M")
data = {'the_message': 'You have x new friends', 'param2': 'value2'}

reg_id = 'APA91bHDRCRNIGHpOfxivgwQt6ZFK3isuW4aTUOFwMI9qJ6MGDpC3MlOWHtEoe8k6PAKo0H_g2gXhETDO1dDKKxgP5LGulZQxTeNZSwva7tsIL3pvfNksgl0wu1xGbHyQxp2CexeZDKEzvugwyB5hywqvT1-UxxxqpL4EUXTWOm0RXE5CrpMk'

gcm.plaintext_request(registration_id=reg_id, data=data)

설명:

  • from gcm import *: Android용 Google Cloud Messaging용 Python 클라이언트를 가져옵니다.
  • gcm: Google API 프로젝트에서 API 키를 추가합니다. 서버의 IP 주소가 허용된 IP에 있는지 확인하십시오
  • reg_id: Android 애플리케이션에서 regid 추가

6단계 — 푸시 알림 보내기

이 명령어를 실행하여 앱에 테스트 알림을 보냅니다.

sudo python ~/test_push.py

10초 정도 기다립니다. Android 기기에서 알림을 받아야 합니다.

문제 해결.

약 10초 후에도 알림이 기기에 나타나지 않으면 다음 단계를 따르세요.

  • 스마트폰/태블릿이 인터넷에 연결되어 있습니까?
  • 올바른 프로젝트 키가 있습니까?
  • 앱에서 올바른 등록 번호를 가지고 있습니까?
  • Google API 서버 키에 서버의 IP 주소가 추가되었습니까?
  • 서버가 인터넷에 연결되어 있습니까?

그래도 알림을 받지 못한다면 앱 때문일 수 있습니다. 몇 가지 오류가 있는지 logcat을 확인하십시오.

여기에서 갈 곳

이 간단한 테스트를 완료한 후에는 모든 사용자에게 알림을 보내고 싶을 것입니다. 1000개 단위로 보내야 한다는 점을 기억하십시오. 또한 CGM에서 "유효하지 않은 ID\라고 응답하면 데이터베이스에서 제거해야 합니다.

이 자습서의 예제를 자신의 Android 애플리케이션과 함께 사용하도록 조정할 수 있습니다.