0

Я пытаюсь настроить базовое приложение Xamarin с push-уведомлениями для Android. Я последовал демонстрации here, и все, казалось, шли хорошо. В журнале приложений показывает регистрационный элемент, полученный с помощью следующего кода:Xamarin Google Cloud Messaging не работает

using System; 
using Android.App; 
using Android.Content; 
using Android.Util; 
using Android.Gms.Gcm; 
using Android.Gms.Gcm.Iid; 

namespace HawkProject.Droid { 
[Service(Exported = false)] 
class RegistrationIntentService : IntentService 
{ 
    static object locker = new object(); 

    public RegistrationIntentService() : base("RegistrationIntentService") {  } 

    protected override void OnHandleIntent (Intent intent) 
    { 
     try 
     { 
      Log.Info ("RegistrationIntentService", "Calling InstanceID.GetToken"); 
      lock (locker) 
      { 
       var instanceID = InstanceID.GetInstance (this); 
       var token = instanceID.GetToken (
        "1015213323461", GoogleCloudMessaging.InstanceIdScope, null); 

       Log.Info ("RegistrationIntentService", "GCM Registration Token: " + token); 
       //SendRegistrationToAppServer (token); 
       //Subscribe (token); 
      } 
     } 
     catch (Exception e) 
     { 
      Log.Debug("RegistrationIntentService", "Failed to get a registration token"); 
      Log.Debug("RegistrationIntentService", e.Message); 

      return; 
     } 
    } 

    void SendRegistrationToAppServer (string token) 
    { 
     // Add custom implementation here as needed. 
    } 

    void Subscribe (string token) 
    { 
     var pubSub = GcmPubSub.GetInstance(this); 
     pubSub.Subscribe(token, "/topics/hawkglobal", null); 
    } 
} 
} 

Application Log возвращает:

[RegistrationIntentService] Calling InstanceID.GetToken 
[RegistrationIntentService] GCM Registration Token: dz8yxsF61tc:APA91bFpHBPsJuGUN2Yh5Hv9CyuAgyIUP4qthhNE79rJUOvLH__ildlVOaP9Q-X1lBpDk69BDRbnzDl4kdEdJBjyudwiVfRZnVR4trQwcM8JZYIEqMNFiXAy61RSjD2MWnC2kmNLj1Ev 

Мой манифест следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" package="com.gcs.hawkproject" android:versionCode="1" android:versionName="start"> 
<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="com.gcs.hawkproject.permission.C2D_MESSAGE" /> 
<permission android:name="com.gcs.hawkproject.permission.C2D_MESSAGE" 
      android:protectionLevel="signature" /> 
<application android:label="Hawk" android:icon="@drawable/log"></application> 
<application android:label="RemoteNotifications" android:icon="@drawable/Icon"> 
    <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.gcs.hawkproject" /> 
     </intent-filter> 
    </receiver> 
    <service 
     android:name="com.gcs.hawkproject.MyGcmListenerService" 
     android:exported="false" > 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     </intent-filter> 
    </service> 
    <service 
     android:name="com.gcs.hawkproject.MyInstanceIDListenerService" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.iid.InstanceID"/> 
     </intent-filter> 
    </service> 
</application> 
</manifest> 

Все, кажется, идет хорошо , но когда я пытаюсь отправить сообщение, я получаю следующие результаты:

POST:

{ 
    "data" : { "message" : "This is a test" }, 
    "to" : "dz8yxsF61tc:APA91bFpHBPsJuGUN2Yh5Hv9CyuAgyIUP4qthhNE79rJUOvLH__ildlVOaP9Q-X1lBpDk69BDRbnzDl4kdEdJBjyudwiVfRZnVR4trQwcM8JZYIEqMNFiXAy61RSjD2MWnC2kmNLj1Ev" 
} 

РЕАКЦИЯ

{ 
    "multicast_id":5139152955408512939, 
    "success":0,"failure":1,"canonical_ids":0, 
    "results": [{"error":"NotRegistered"}] 
} 

Любые мысли? Я новичок как в Xamarin, так и в GCM, поэтому я шагаю по часам без успеха.

У меня есть другой код из демонстрации, а также, что я могу отправить сообщение при необходимости.

Заранее спасибо.

+0

испытывают точно такую ​​же проблему. Вы решили это? –

+0

Возможно, вы захотите проверить эту тему: http://stackoverflow.com/questions/34513614/google-cloud-message-not-registered-failure-and-unsubscribe-best-practices –

ответ

0

Я хотел бы предложить попробовать следующее:

(1) Удаление и повторная установка приложения, получить новый маркер уведомления от GCM, попробуйте толчок новый маркер снова.

(2) Дважды проверьте идентификатор проекта «1015213323461», возможно ли, что sender_id не совпадает с сертификатом сервера, используемым для отправки уведомления?

(3) com.gcs.hawkproject - это идентификатор проекта, соответствующий тому, который вы зарегистрировали в консоли разработчика Google?

1

Изменить

using Android.Gms.Gcm.Iid;

в

using Android.Gms.Iid;

+0

Работаю для меня :) –

0

Существует проблема развертывания Xamarin студии, что в результате этих ошибок NotRegistered мой обходной путь подробно here.

0

Это новый проект GCM? Теперь вы должны использовать FCM - Firebase Cloud Messaging.

С сайта GCM:

Firebase Cloud Messaging (ТСМ) является новой версией ГКМ. Он наследует надежную и масштабируемую инфраструктуру GCM, а также новые функции! См. FAQ, чтобы узнать больше. Если вы интегрируете обмен сообщениями в новое приложение, начните с FCM. Пользователям GCM настоятельно рекомендуется перейти на FCM, , чтобы воспользоваться новыми возможностями FCM сегодня и в будущем.

Я думаю, что ваш ключ GCM может быть недействительным сейчас. Вы должны создать свой проект ТСМ здесь:

https://firebase.google.com/docs/cloud-messaging/

Смежные вопросы