2012-02-06 1 views
1

하나의 간단한 질문, 더 열심히 일 :C2DM - 역할 보낸 계정

1) 발신자 ID (Gmail 계정)을 우리는 설정에서 전화를 추가해야 하나 다를 수 있습니다 -> 계정?

2) 계정을 자동으로 추가해야하는데 (..) 해결할 수 있지만 설정 -> 계정에서 추가하려는 계정의 메일을 숨길 수 있습니까? 나는 사람들에게 이메일 주소를 알리고 싶지 않다.

감사합니다.

+0

1 등분은 다를 수 있습니다. 설정 -> 계정에서 전화로 C2dm 등록에 사용하는 것과 다를 수 있습니다. –

+0

발신자 ID로 [email protected]을 사용하고 설정 -> 계정에서 mail2[email protected]을 사용할 수 있습니까? 그것이 나에게 보이는 것은 이전에 추가 된 경우에도 전화 상에 Gmail 계정을 갖는 것이 중요하다는 것입니다. 맞습니까? – psk

+0

휴대 전화에서 푸시 알림을 등록 할 때 사용한 발신자 ID는 휴대 전화의 로그인 한 Google 계정과는 분명히 다릅니다. 왜 전화에 비밀리에 계정을 추가해야합니까? – hankystyles

답변

1

전화의 Gmail 계정은 내부적으로 C2DM 메시지의 수신자를 식별하는 데 사용됩니다. 먼저 클라이언트가 자신을 등록하면 (C2DM 메시지가 전송 될 때) 등록 된 모든 클라이언트가 C2DM 메시지를받습니다. 둘 이상의 클라이언트가 C2DM 메시지의 수신자로 자신을 등록 할 수 있습니다. 구글 C2DM 사이트에서

( Registering 참조)

Intent registrationIntent = new Intent("com.google.android.c2dm.intent.REGISTER"); 
registrationIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); 
registrationIntent.putExtra("sender", emailOfSender); 
startService(registrationIntent); 

매개 변수 응용 프로그램 (var에의 emailOfSender 위의 코드에) 보낸 사람 ID로 따로 등록 과정에서 사용되는 패키지 이름을 식별합니다. 기기의 Gmail 계정은 코드에서 사용되지 않지만 C2DM 서버에서 휴대 기기를 식별하기 위해 내부적으로 사용됩니다 (Android 구현은 클라이언트 측 Gmail 계정을 직접 제공하거나 Gmail 계정과 연결된 ID를 제공합니다).

Google에서 말하기 : 마켓 애플리케이션이 설치된 Android 2.2 이상을 실행하는 기기가 필요합니다. 마켓 앱이 C2DM 서버에 대한 연결을 유지 관리하기 때문입니다. 등록 ID는 모든 장치에 따라 다릅니다. 서버에서 C2DM 메시지를 보내기 전에 클라이언트는 등록 ID를 서버에 알려야합니다.

(서버 측에서) C2DM 메시지를 전송할 응용 프로그램을 만들려면 Gmail 계정 (장치에서 사용한 SenderID)이 필요합니다. 일반적으로 "응용 프로그램 당 하나의 GMail 계정"패턴이 사용됩니다. C2DM에 등록 할 때 수신하는 Android 앱의 SenderID와 네임 스페이스를 등록 양식에 입력해야합니다. 등록 정보는 기기를 등록하기 위해 클라이언트에서 사용한 것과 정확히 동일한 정보입니다.

둘 다 GMail 계정은 공개되지 않습니다. 관계는 n-1-m으로 n 클라이언트와 m 서버가 하나의 C2DM 서버에 등록됩니다. Google (C2DM 서버) 만 사용되는 Gmail 계정을 알고 있습니다.

모바일에 사용되는 실제 Gmail 주소가 하나 있습니다. 내 에뮬레이터에서 사용하는 GMail 주소를 디버깅하고 있습니다. 그럼 내가 쓴 모든 C2DM 가능 응용 프로그램에 대한 3 GMail 계정이 있습니다.

+0

그렇다면 registrationId를 가져와야 할 때 발신자 ID (이전에 c2dm에 액세스 할 수 있도록 양식에 지정한 사람)와 휴대 전화에 사용 된 gmail 계정 중 하나 (또는 ​​하나)를 지정해야한다고 말합니까? – psk

+0

위 응답을 업데이트하고 클라이언트 등록 코드를 삽입했습니다. 대답은 '아니오'입니다. SenderId 만 사용하십시오. 내부적으로 (안드로이드 C2DM 코드에서) 각 클라이언트는 식별되어야하며이 경우 휴대 전화의 Gmail 계정이 사용되지만 SDK 기능에는 사용하지 않으며 발신자에게 게시되지 않는다고 가정합니다. – ChrLipp

+0

젠장, 나는 미치고있다 : 그렇다면 C2DM이 어떻게 전화를 인식 할 것인가? 등록 단계에서 각 앱에 대해 "emailOfSender"필드에 발신자 ID 만 지정해야합니다 (전화상의 Gmail 계정 제외). 등록 ID는이 정보에 연결되어 있습니다. 그러면 (각하) 각 전화마다 "해야"합니다. 그렇지 않습니까? 또는 각 장치가 등록 ID를 요청할 때마다 다른 것입니까? – psk

0

죄송합니다, 내 질문은 조금 (또는 많이) 바보입니다,하지만 난 이해되는 경우 :

대신 emailOfSender의
registrationIntent.putExtra("sender", emailOfSender); 

난이 C2DM에 필요한 몇 가지 실제 이메일 주소를 추가하는 듯했으나해야한다 전자 메일이 다른 장치에 설치된 각 응용 프로그램마다 다를 수 있습니다. 즉,이 전자 메일을 장치 설정에서 가져 가야합니까, 아니면 하드 코딩 할 수 있습니까?

나는 http://www.vogella.com/articles/AndroidCloudToDeviceMessaging/article.html에서 튜토리얼을 반복하고 발견되었다 : 여기

public class SecureStorage { 
    public static final String USER = "your_registeredUser"; 
    public static final String PASSWORD = "your_password"; 
} 

실제 자격 증명을 때 : 서버 테스트 부분을 개발하는 동안

// Sender currently not used 
intent.putExtra("sender", "[email protected]"); 

그래서 내가 넣어 뒤에, 그런 식으로 왼쪽 나는 서버 측 응용 프로그램에서 사용되는 전자 메일 계정으로 [email protected]을 변경하자마자 응답 200을 받았지만 장치에 메시지가없는 응용 프로그램에 메시지를 보내려고했습니다. 즉시 알림을 받았습니다.

+1

바보 같은 질문은 없습니다. emailOfSender는 C2DM에 가입 한 이메일이어야합니다. 또한 다른 기기에 설치된 각 앱마다 고유합니다. 수신되지 않은 알림에 대해서는 200 응답 코드가 있어도 두 가지 요인에 따라 다릅니다. 첫 번째는 에뮬레이터 (장치에서 더 잘 작동 할 수 있음)입니다. 둘째, C2DM은 최선형 서비스이므로 일부 데이터가 손실 될 수 있습니다. – psk