几个星期以来,我一直在为 GCM 的实现而苦苦挣扎,但我真正想了解它是如何工作的,所以我决定采取“小步骤”。
首先,正如提到的here https://developers.google.com/cloud-messaging/registration,我明白要做的第一件事是注册我的设备/应用程序必须首先向 GCM 注册。
要验证它们是否可以发送和接收消息,客户端应用程序必须向 GCM 注册。在此过程中,客户端获得唯一的注册令牌。
我想知道下面的过程和代码是否代表进行此类注册所需的最少代码(“所需代码非常少'是因为当我学习 OpenGL ES 2.0 并开始处理着色器时,我发现在处理困难/令人困惑的概念时,如果您了解所需的最少代码,您以后可以了解什么是“外围”代码)
向 GCM 注册应用程序的过程:
-
在Google开发者控制台创建一个项目;
- 激活“Android云消息”API;
- 在“Credentials”处创建服务器 API 密钥;
- 记下项目 ID;
- 记下项目编号;
- 记下服务器 API 密钥;
-
创建Android Studio项目;
- 添加“App Engine Backend with CGM”模块类型;
- 在打开的“appengine-web.xml”窗口中,输入应用程序 ID 和服务器 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>
主要活动:
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>