Я настраиваю C2DM на существующее клиентское/серверное приложение Android. Приложение уже имеет установленный набор классов для связи с сервером, входа пользователя в систему и поддержки токена аутентификации для использования с сервером.
Следуя документации, я добавил код для регистрации на C2DM и создал BroadcastReceiver для получения ответов. В моем BroadcastReceiver я получаю вызов метода onReceive(), который содержит идентификатор регистрации. Я могу увидеть его в отладчике и зарегистрировать его на консоли.
Проблема в том, что мне теперь нужно отправить ID на мой сервер, но я не могу, потому что у меня нет доступа к остальной части моего приложения. BroadcastReceiver - это не намерение или контекст, или что-то еще, что я знаю. Я мог бы обойти это, если бы у меня был только токен аутентификации пользователя, но я тоже не могу этого сделать. Я попытался передать его в качестве дополнительного для намерения регистрации, но он потерялся на этом пути.
Каков правильный способ получения дополнительных компонентов или контекста приложения в методе onReceive()?
Спасибо, Франк
Есть несколько хороших ресурсов, на которые это взято:
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
Log.d(TAG, "Got a reply from Google");
if (action.equals(REGISTER_ACTION))
{
handleRegistration(context, intent);
}
else if (action.equals(RECEIVE_ACTION))
{
handleMessage(context, intent);
}
else
{
Log.w(TAG, "Unexpected intent: " + intent);
}
}
private void handleRegistration(Context context, Intent intent)
{
String registrationId = intent.getStringExtra("registration_id");
String error = intent.getStringExtra("error");
String unregistered = intent.getStringExtra("unregistered");
if (error != null)
{
Log.e(TAG, "Registration failed: " + error);
this.getApp(context).disablePush();
}
else if (unregistered != null)
{
Log.d(TAG, "Unregistered: " + unregistered);
context.startService(new Intent(RegistrationService.COMPLETE_UNREGISTER_ACTION));
}
else if (registrationId != null)
{
Log.d(TAG, "Registered with registration ID [" + registrationId + "]");
// Send registrationId to the Application Server in a separate thread.
Intent i = new Intent(RegistrationService.COMPLETE_REGISTER_ACTION);
i.putExtra("regId", registrationId);
context.startService(i);
}
else
{
Log.d(TAG, "Other registration response: " + intent.getExtras());
}
}
Подробнее читайте в разделе Marakana