Я успешно отправил сообщения GCM в мое приложение Xamarin раньше, но по какой-то причине они терпят неудачу сейчас. Запрос POST возвращает NotRegistered. Мой код выглядит следующим образом:Сообщение GCM возвращает «NotRegistered» (Xamarin)
Android Manifest:
<application android:label="MyProject">
<receiver android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.example.MyProject" />
</intent-filter>
</receiver>
</application>
Instance ID службы Слушатель:
[Service(Exported = false), IntentFilter(new[] { "com.google.android.gms.iid.InstanceID" })]
class InstanceIdListenerService : InstanceIDListenerService
{
public override void OnTokenRefresh()
{
var intent = new Intent(this, typeof(RegistrationIntentService));
StartService(intent);
}
}
Регистрация Намерение услуг (это создается в основной деятельности):
static object locker = new object();
protected override void OnHandleIntent(Intent intent)
{
lock (locker)
{
var instanceID = InstanceID.GetInstance(this);
var token = instanceID.GetToken(
"123456789123",
GoogleCloudMessaging.InstanceIdScope,
null);
SendRegistrationToAppServer(token); // just a HTTP request
}
}
GCM слушатель службы:
[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" })]
class GcmLstnrService : GcmListenerService
{
public override void OnMessageReceived(string from, Bundle data)
{
string msg = data.GetString("message");
Log.Info("GcmLstnrService", "From: " + from);
Log.Info("GcmLstnrService", "Msg: " + msg);
}
}
Ответ POST:
{"multicast_id":8322296108700959972,
"success":0,
"failure":1,
"canonical_ids":0,
"results":[{"error":"NotRegistered"}]}
Что случилось? Я был бы очень признателен за любую помощь.
У вас есть вызов GcmClient.Register() в любом месте вашего кода? –
Нет, я не хочу, по-видимому, должен? Где я должен добавить это? Разве GcmClient не какой-то плагин? – mkkekkonen
Я дважды проверял и, похоже, зовут Register() - это старый, устаревший способ зарегистрироваться для GCM. Я еще не работал с новым подходом: https://developers.google.com/cloud-messaging/android/legacy-regid –