private void registerClient()
{
try {
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals(""))
{
registrationStatus = "Registering...";
GCMRegistrar.register(this, "517739810110");
regId = GCMRegistrar.getRegistrationId(this);
registrationStatus = "Registration Acquired";
sendRegistrationToServer();
}
else
{
registrationStatus = "Already registered";
}
}
catch (Exception e)
{
e.printStackTrace();
registrationStatus = e.getMessage();
}
}
我可以成功为某些Android设备从GCM获取注册ID,但不能获取所有Android设备的注册ID。 GCM返回某些Android设备的空注册ID。 我使用GCM.jar文件作为第三方工具,它返回注册ID。 所有权限都在清单文件中正确定义。 发件人ID是正确的。 API密钥是正确的。
答案 0 :(得分:6)
我不确定返回空白注册ID的确切位置,但重要的是要意识到:
GCMRegistrar.register(this, "517739810110");
是异步事件,不会立即发生。所以打电话:
GCMRegistrar.getRegistrationId(this);
之后不会只给你一个空白字符串的注册ID。为了在设备注册GCM服务器后正确获取注册ID,您需要在GCMBaseIntentService中处理以下回调:
protected void onRegistered(Context context, String registrationId)
您将获得注册ID以及应在何处注册应用程序服务器。您应该使用GCM client sample作为指导,了解如何执行此操作:
@Override
protected void onRegistered(Context context, String registrationId) {
Log.i(TAG, "Device registered: regId = " + registrationId);
displayMessage(context, getString(R.string.gcm_registered,
registrationId));
ServerUtilities.register(context, registrationId);
}
您还应该遵循GCM客户端示例在DemoActivity:
中注册的方式final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
// Automatically registers application on startup.
GCMRegistrar.register(this, SENDER_ID);
}
请注意,在调用register()方法后,它不会立即查询注册ID。
答案 1 :(得分:0)
调用此方法两次,因为有些时候准备好的Android没有获得该ID String Id = Notification();
if(Id.equals("")){
String Id = Notification();
}
private String Notification() {
registerReceiver(mHandleMessageReceiver, new IntentFilter(
DISPLAY_MESSAGE_ACTION));
final String regId = GCMRegistrar
.getRegistrationId(ActivateScreen.this);
// Check if regid already presents
if (regId.equals("")) {
// Registration is not present, register now with GCM
GCMRegistrar.register(ActivateScreen.this, SENDER_ID);
} else {
// Device is already registered on GCM
if (GCMRegistrar.isRegisteredOnServer(ActivateScreen.this)) {
// Skips registration.
// Toast.makeText(getApplicationContext(),
// "Already registered with GCM", Toast.LENGTH_LONG)
// .show();
} else {
final Context context = ActivateScreen.this;
mRegisterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// Register on our server
// On server creates a new user
ServerUtilities.register(context, "", "", regId);
return null;
}
@Override
protected void onPostExecute(Void result) {
mRegisterTask = null;
}
};
mRegisterTask.execute(null, null, null);
}
}
Log.i("Device Id", appId);
return regId;
}