Добавление Google Cloud Messagin (GCM) для Android - процесс регистрации

1

Я уже несколько недель борюсь с реализацией GCM, но как я действительно хочу понять, как это работает, я решил взять "детские шаги".

Прежде всего, как упоминалось здесь, я понял, что первое, что нужно сделать, это зарегистрировать мое устройство/приложение, которое должно сначала зарегистрироваться в GCM.

Чтобы убедиться, что они могут отправлять и получать сообщения, клиентские приложения должны зарегистрироваться в GCM. В этом процессе клиент получает уникальный регистрационный токен.

Я хотел бы знать, является ли приведенная ниже процедура и код минимальным кодом, необходимым для такой регистрации ( "очень минимальный код необходим", потому что, когда я изучил OpenGL ES 2.0 и начал разбираться с шейдерами, я увидел что, когда вы имеете дело с трудными/запутанными концепциями, если вы понимаете минимальный необходимый код, вы можете позже понять, что такое "периферийный" код)

Процедура регистрации приложения с помощью GCM:

  • Создайте проект в консоли разработчика Google;

    • Активировать API "Облачные сообщения для Android";
    • Создать ключ API сервера в разделе "Учетные данные";
    • Обратите внимание на идентификатор проекта;
    • Обратите внимание на номер проекта;
    • Обратите внимание на ключ API сервера;
  • Создайте проект Android Studio;

    • Добавьте модуль модуля "Интерфейс App Engine с CGM";
    • В открывшемся окне "appengine-web.xml" введите идентификатор приложения и ключ API сервера.
    • Создайте основное действие, используя номер проекта (SENDER_ID).

После того как я сделал все это и запустил приложение, у меня появился токен с 152 символами. Все ли это правильно? Учитывая, что у меня есть токен, мое устройство зарегистрировано в GCM?

AppEngine-web.xml:

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    <application>mygcmtest...</application>
    <version>1</version>
    <threadsafe>true</threadsafe>

    <system-properties>
        <property name="java.util.logging.config.file" value="WEB-INF/logging.properties" />

        <property name="gcm.api.key" value="AIza..." />
    </system-properties>
</appengine-web-app>

MainActivity:

public class MainActivity extends AppCompatActivity {

    private final Context mContext = this;
    private final String SENDER_ID = "319899...";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getGCMToken();
    }

    private void getGCMToken() {
        new AsyncTask<Void, Void, Void>() {
            @Override
            protected Void doInBackground(Void... params) {
                try {
                    InstanceID instanceID = InstanceID.getInstance(mContext);
                    String token = instanceID.getToken(SENDER_ID, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
                    Log.e("GCM Token", token);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute();
    }
}

манифеста:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aninha.mygcmtest..." >

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

    <permission
        android:name="com.example.gcm.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />

    <uses-permission android:name="com.example.gcm.permission.C2D_MESSAGE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".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>
    </application>

</manifest>
  • 0
    если вы получаете токен обратно, то ваше устройство, безусловно, зарегистрировано
Теги:
google-cloud-messaging

1 ответ

2
Лучший ответ

Отвечает ли мой исходный код на ваш вопрос Как реализовать GCM Hello World для Android с помощью Android Studio недостаточно для создания двух простых проектов GCM ( серверная и клиентская)?:)

Конечно, пример кода, который я использовал, просто для очень простого случая: "серверные приложения отправляют, клиентское приложение получает и отображает сообщение".

Подводя итог, вам необходимо выполнить следующие шаги:

  • Создайте новый проект Google Developers Console. В этот шаг, для простоты вам просто нужно принять во внимание 2 значения: Project Number, что будет использоваться как SENDER_ID в моем проекте клиента; и API server key (созданный в Credentials), который будет использоваться как API_KEY в моем проекте сервера.
  • Создайте новый простой проект для Android на стороне сервера (с базовым исходным кодом в качестве ответа в предыдущем вопросе).
  • Создайте новый простой проект для Android на стороне клиента (с базовым исходным кодом в качестве моего ответа в предыдущем вопросе, я настроен из исходного источника Google Cloud Сообщения - GitHub).
  • Запустите клиентское приложение, вы получите регистрационный токен (означает, что ваше устройство успешно зарегистрировано). Затем вставьте (жесткий код) этот токен в переменной CLIENT_REGISTRATION_TOKEN в приложении сервера.
  • Запустите приложение-сервер и проверьте результат (клиентское приложение получило сообщение или нет)

Надеюсь, это поможет!

P/S: я не использую файл appengine-web.xml

  • 1
    Ваш первый ответ на другой пост был отличным, просто я немного запутался с двумя классами MainActivity и некоторыми другими мелочами. Теперь для меня все ясно. Я постараюсь реализовать код сегодня и дам вам знать результат
  • 0
    @BKN Я думаю, что все прошло хорошо, я только что получил странное сообщение о TextView ... "{" fail ": 1," results ": [{" error ":" NotRegistered "}]," success ": 0, "multicast_id": 322984 ...., "canonical_ids": 0}. Это сообщение, которое я должен был получить?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню