Всеки, който прави C2DM на Android

Трябва да внедря c2dm в моето приложение. Има ли някой, който също прави това? Моля, помогнете..някои уроци ще бъдат много полезни ИЛИ ако сте завършили внедряването на c2dm, то един урок е повече от оценен.

Моля помогнете.


person mudit    schedule 25.10.2010    source източник
comment
прилагам C2DM и работи добре за мен. можете да проверите тази връзка github.com/commonsguy/cw-advandroid/tree / Надявам се, че това ще ви помогне.   -  person Sunit Kumar Gupta    schedule 28.10.2010
comment
Как внедрявате сървърната част на трета страна. Кой език използвахте -- php/pyhtong?? Можете ли да ми помогнете с внедряването от страна на сървъра?   -  person mudit    schedule 29.10.2010
comment
внедряването от страна на сървъра се извършва с помощта на php. просто получава register_id и device_id от устройството и го обработва в таблица. сървър получава токен за удостоверяване от c2dm сървър чрез използване на curl URL (посочен в примера), сървърът връща токен за удостоверяване, след което използва следващия URL адрес, за да изпрати известие до устройството.   -  person Sunit Kumar Gupta    schedule 01.11.2010
comment
Здравей, мудит, можеш ли да ми помогнеш?   -  person Sunit Kumar Gupta    schedule 05.07.2011
comment
Опитах връзката, дадена от вас, и получавам E/AndroidRuntime(1508): java.lang.RuntimeException: Не мога да инстанцирам услуга com.commonsware.android.c2dm.C2DMReceiver: java.lang.ClassNotFoundException: com.commonsware.android. c2dm.C2DMReceiver в товарач dalvik.system.PathClassLoader[/data/app/com.commonsware.android.c2dm-2.apk] .. Можете ли да ми помогнете да разреша това и освен това да ми кажете как сървърът ще изпраща съобщения   -  person Aditya1510    schedule 21.11.2011


Отговори (2)


Продължих и изтеглих изходния код на Chrome2Phone за android и разбрах как работи чрез този пример, имах най-много проблеми с внедряването на сървърната страна на приложението.

Изтеглете го от: http://code.google.com/p/chrometophone/source/checkout

или го svn:

svn checkout http://chrometophone.googlecode.com/svn/trunk/ chrometophone-read-only

Основни неща, които трябва да разберете.

В класа C2DMBaseReciever имате:

@Override
    public final void onHandleIntent(Intent intent) {
        try {
            Context context = getApplicationContext();
            if (intent.getAction().equals(REGISTRATION_CALLBACK_INTENT)) {
                handleRegistration(context, intent);
            } else if (intent.getAction().equals(C2DM_INTENT)) {
                onMessage(context, intent);
            } else if (intent.getAction().equals(C2DM_RETRY)) {
                C2DMessaging.register(context, senderId);
            }
        } finally {
            //  Release the power lock, so phone can get back to sleep.
            // The lock is reference counted by default, so multiple 
            // messages are ok.

            // If the onMessage() needs to spawn a thread or do something else,
            // it should use it's own lock.
            mWakeLock.release();
        }
    }

Този метод получава намеренията от услугата C2DM и ги обработва.

В метода handleRegistration ще видите някакъв код, който изглежда така:

} else {
            try {
                onRegistrered(context, registrationId);
                C2DMessaging.setRegistrationId(context, registrationId);
                //Add some code here to send your server the registration ID for this phone.
            } catch (IOException ex) {
                Log.e(TAG, "Registration error " + ex.getMessage());
            }
        }

След това трябва да използвате услугата за влизане на google oAuth, за да регистрирате сървъра си в услугата, след като това стане, можете да изпратите съобщение. Когато тествах, използвах curl, за да изпращам заявки за http post до сървъра.

За да се регистрирате от сървъра:

curl https://www.google.com/accounts/ClientLogin -d Email=theEmailYouWhitelisted -d Passwd=pass****word -d accountType=HOSTED_OR_GOOGLE -d source=Google-cURL-Example -d service=ac2dm

Ще получите съобщение с идентификатор за удостоверяване. След това го използвате, за да изпратите съобщенията. За да изпратите съобщение, използвайте:

curl --header "Authorization: GoogleLogin auth=**authFromRegistrationAbove**" "https://android.apis.google.com/c2dm/send" -d registration_id=**phoneRegistrationId(reciever)** -d "data.message=StringToPass" -d collapse_key=something -k

Изтеглете curl от: CURL

Надявам се това да помогне.

person blindstuff    schedule 25.10.2010
comment
Получавам токена за удостоверяване добре, но стартирането на curl на /send връща ...‹H1›Unauthorized‹/H1›‹H2›Error 401‹/H2›.... Някаква идея какво може да не е наред? - person Thomas Ahle; 23.03.2011
comment
Сигурни ли сте, че използвате токена правилно? трябва да вземете подниз от отговора. - person blindstuff; 23.03.2011
comment
Всичко изглежда наред, опитайте да се регистрирате с фалшив имейл и/или парола, така че да знаете, че това са грешните идентификационни данни, проверете дали това връща Auth Token, ако се върне, нещо може да не е наред с вашата регистрация, ако не, тогава можем изключете това. Току-що пуснах повторно тестовия си сървър, който бях описал тук, и той все още работи добре, предполагам, че или не сте в белия списък, или използвате грешен имейл или нещо подобно. - person blindstuff; 24.03.2011
comment
Използването на друг имейл адрес ми дава Error=BadAuthentication. Странно. - person Thomas Ahle; 24.03.2011
comment
Това е exec, който използвам в PHP сървъра. Копирайте го и го изпробвайте, работи. exec("curl --header \"Authorization: GoogleLogin auth=".$auth."\" \"https://android.apis.google.com/c2dm/send\" -d registration_id=".$id." -d \"data.message=".$mensaje."\" -d collapse_key=something -k"); - person blindstuff; 24.03.2011
comment
@blindstuff Благодаря, промених акаунта от хостван на gmail; и не забравяйте да използвате auth= вместо Auth=. Това го оправи. - person Thomas Ahle; 12.04.2011

урок за c2dm клиент/сървър регистрация и изпращане/получаване на съобщения.

http://android.arnodenhond.com/tutorials/cloud-to-device-messaging

  • намерение да поискате регистрационен номер
  • приемник за получаване на регистрационен идентификатор
  • url за извикване за регистриране на сървъра
  • url за обаждане за изпращане на съобщение
  • приемник за излъчване, за да получите съобщението
person arnodenhond    schedule 23.06.2011