Я уже несколько недель борюсь с реализацией GCM, но как я действительно хочу понять, как это работает, я решил взять "детские шаги".
Прежде всего, как упоминалось здесь, я понял, что первое, что нужно сделать, это зарегистрировать мое устройство/приложение, которое должно сначала зарегистрироваться в GCM.
Чтобы убедиться, что они могут отправлять и получать сообщения, клиентские приложения должны зарегистрироваться в GCM. В этом процессе клиент получает уникальный регистрационный токен.
Я хотел бы знать, является ли приведенная ниже процедура и код минимальным кодом, необходимым для такой регистрации ( "очень минимальный код необходим", потому что, когда я изучил OpenGL ES 2.0 и начал разбираться с шейдерами, я увидел что, когда вы имеете дело с трудными/запутанными концепциями, если вы понимаете минимальный необходимый код, вы можете позже понять, что такое "периферийный" код)
Процедура регистрации приложения с помощью GCM:
Создайте проект в консоли разработчика Google;
Создайте проект Android Studio;
После того как я сделал все это и запустил приложение, у меня появился токен с 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>
Отвечает ли мой исходный код на ваш вопрос Как реализовать GCM Hello World для Android с помощью Android Studio недостаточно для создания двух простых проектов GCM ( серверная и клиентская)?:)
Конечно, пример кода, который я использовал, просто для очень простого случая: "серверные приложения отправляют, клиентское приложение получает и отображает сообщение".
Подводя итог, вам необходимо выполнить следующие шаги:
Project Number
, что
будет использоваться как SENDER_ID
в моем проекте клиента; и API server key
(созданный в Credentials), который
будет использоваться как API_KEY
в моем проекте сервера.CLIENT_REGISTRATION_TOKEN
в приложении сервера.Надеюсь, это поможет!
P/S: я не использую файл appengine-web.xml