Получение ключа API для GCM

Я пытаюсь зарегистрировать свое приложение для Android в GCM, следуя инструкциям в этой ссылке для того чтобы получить апи ключ я сделал то что написано в цифрах 1-7 но на шаге 8 не могу найти раздел Android Key.

Что я должен делать?

p.s. Когда я пытаюсь зарегистрировать свое устройство в gcm gcm.register(SENDER_ID), я получаю сообщение об ошибке, говорящее о том, что служба недоступна, связаны ли они с проблемами? или эта ошибка что-то другое? (серверную часть приложения я не писал)

Манифест андроида:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.appspot.smartgan"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <permission
        android:name="com.appspot.smartgan.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.appspot.smartgan.permission.C2D_MESSAGE" />

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light" >
        <activity
            android:name="com.appspot.smartgan.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".GcmBroadcastReceiver"
            android:permission="com.google.android.c2dm.permission.SEND" >
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />

                <category android:name="com.appspot.smartgan" />
            </intent-filter>
        </receiver>

        <service android:name=".GcmIntentService" />

        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name="com.appspot.smartgan.LoginActivity"
            android:label="@string/title_activity_login"
            android:windowSoftInputMode="adjustResize|stateVisible" >
        </activity>
        <activity
            android:name="com.appspot.smartgan.ChildActivity"
            android:label="@string/title_activity_child" >
        </activity>
    </application>

</manifest>

регистрационный код: (я использовал код из примера, опубликованного Google)

private void registerInBackground() {   
    new AsyncTask<Void, Void, String>() {
        String str = "";
        @Override
        protected String doInBackground(Void... params) {
            String message = "";

            try {
                if (gcm == null) {
                    gcm = GoogleCloudMessaging.getInstance(context);
                }
                regid = gcm.register(SENDER_ID);
                message = "Device registered, registration ID=" + regid;

                Log.d("SMARTGAN_PLAY", "register completed");

                // send registration id to the server
                sendRegistrationIdToServer();

                // Persist the regID - no need to register again.
                storeRegistrationId(context, regid);
            } catch (IOException e) {
                message = "Error:" + e.getMessage();
            }
            str = message;
            return message;
        }

        @Override
        protected void onPostExecute(String message) {
            childrenTextView.setText(str);
        }

    }.execute(null, null, null);
}

person Dor Mesica    schedule 17.12.2013    source источник


Ответы (2)


Вам не нужен ключ API для регистрации в GCM. Вам нужен только идентификатор отправителя (который является идентификатором проекта Google API, который вы создали для своего приложения). Ключ API необходим только на стороне сервера для отправки сообщений GCM в ваше приложение.

Причиной недоступности услуги может быть множество вещей. Вам нужно будет опубликовать свой манифест и код регистрации клиента, чтобы получить дополнительную помощь.

person Eran    schedule 17.12.2013
comment
У меня тоже такая же проблема. Я заметил, что @meda имеет фактическое целое число в качестве идентификатора проекта, но на моей стороне проект идентифицируется как строка prismatic-petal-438, и я получаю сообщение invalid_sender. Примеров обесцененного c2dm много, а вот gcm не так много - person v0d1ch; 24.12.2013
comment
Извините, только что узнал, что вам нужно использовать номер проекта в качестве идентификатора проекта... - person v0d1ch; 24.12.2013

//Subtitute with your own project ID
String SENDER_ID = "46086692976";

Смотрите скриншот: введите здесь описание изображения

person meda    schedule 17.12.2013
comment
Я не понимаю, что ты пытаешься сказать. SENDER_ID определен и имеет правильное значение, я просто не думал, что это важно. - person Dor Mesica; 17.12.2013
comment
хорошо, ошибка предполагает, что SENDERID недействителен, вам нужно убедиться, что он правильный. - person meda; 17.12.2013
comment
Не знаю что с этим делать... Скопировал номер проекта из облачной консоли (ctrl+C) - person Dor Mesica; 17.12.2013
comment
@DorMesica Вставьте его туда, где вы присваиваете значение SENDER_ID - person meda; 17.12.2013
comment
Это то, что я сделал, я определил public static final String SENDER_ID="<project number copied from Google Cloud Console>", но это не работает. - person Dor Mesica; 17.12.2013
comment
@DorMesica, тогда это означает, что сервис Google Play недоступен, я считаю, что вам нужна учетная запись Gmail, я собираюсь исследовать это сейчас - person meda; 17.12.2013
comment
Я следовал примеру кода Google, размещенному в ссылке, которую я добавил к исходному вопросу, он включает код для проверки доступности сервисов Google Play на устройстве, плюс я попробовал это приложение на своем телефоне, и у меня есть как Google Сервисы Play и учетная запись Gmail. Я часами гуглил эту проблему, но не нашел, как ее исправить. - person Dor Mesica; 17.12.2013
comment
давайте продолжим это обсуждение в чате - person meda; 18.12.2013