1

ユーザー アカウントから GCM 情報を削除できるように、Google GCM 応答 (つまり、NotRegistered エラー) を取得する方法を見つけようとしています。

GCM Archetecture の概要(GCMからのデバイスの登録解除に関して) から、「GCM サーバーがデバイスにメッセージを送信しようとし、デバイスがアプリケーションがアンインストールされているか、ブロードキャストがないことを応答した場合にのみ登録解除されます」と述べています。受信者は com.google.android.c2dm.intent.RECEIVE インテントを受信するように構成されています。その時点で、サーバーはデバイスを未登録としてマークする必要があります (サーバーは NotRegistered エラーを受け取ります)。

Android 用 Mono の PushSharp 内。ユーザーにメッセージを送信しようとして、代わりに Google から「NotRegistered エラー」を受け取ったときに Google の応答を取得するにはどうすればよいですか? メッセージを送信するには、次のコードがあります。

    var push = new PushService();

    // setup channel settings: sender id, access key, registration package name
    var settings = new GcmPushChannelSettings(<>, <>, <PACKAGE>);
    push.StartGoogleCloudMessagingPushService(settings);
    var android = NotificationFactory.AndroidGcm();
    android = android.ForDeviceRegistrationId(GCM_Id); 
        push.QueueNotification(android.WithJson("{\"alert\":\"" + message + "\",\"URL\":\"" + URL + "\"}")); 

1. メッセージが送信された 2. アプリがアンインストールされた 3. NotRegistered エラーが発生したため、ユーザー アカウントから GCM ID を削除できるかどうかを知るために、Google からの応答を取得するにはどうすればよいですか?

これについて私が得ることができる助けを楽しみにしています。上記のコードは、PushSharp for Mono for Android (MonoDroid) を使用しており、ユーザーにメッセージを送信する際に問題なく動作します。PushSharpは素晴らしいので、GCM 経由でユーザーにメッセージを送信する場合に強くお勧めします。

4

1 に答える 1

1

Eventsのプロパティに添付されたイベントを購読する必要がありますPushService

その後、イベント ハンドラーで応答を受け取ることができます。

        //Create our service    
        PushService push = new PushService();

        //Wire up the events
        push.Events.OnDeviceSubscriptionExpired += new Common.ChannelEvents.DeviceSubscriptionExpired(Events_OnDeviceSubscriptionExpired);
        push.Events.OnDeviceSubscriptionIdChanged += new Common.ChannelEvents.DeviceSubscriptionIdChanged(Events_OnDeviceSubscriptionIdChanged);
        push.Events.OnChannelException += new Common.ChannelEvents.ChannelExceptionDelegate(Events_OnChannelException);
        push.Events.OnNotificationSendFailure += new Common.ChannelEvents.NotificationSendFailureDelegate(Events_OnNotificationSendFailure);
        push.Events.OnNotificationSent += new Common.ChannelEvents.NotificationSentDelegate(Events_OnNotificationSent);
        push.Events.OnChannelCreated += new Common.ChannelEvents.ChannelCreatedDelegate(Events_OnChannelCreated);
        push.Events.OnChannelDestroyed += new Common.ChannelEvents.ChannelDestroyedDelegate(Events_OnChannelDestroyed);

その後、イベント ハンドラーで例外を調べて、ユーザー アカウントからデバイス ID を削除する必要があるかどうかを判断できます。

        static void Events_OnNotificationSendFailure(Common.Notification notification, Exception notificationFailureException)
        {
            // Remove device id 
            Console.WriteLine("Failure: " + notification.Platform.ToString() + " -> " + notificationFailureException.Message + " -> " + notification.ToString());
        }
于 2012-11-08T21:03:45.867 に答える