0

私は Xamarin を使用して Android アプリを開発しており、プッシュ通知には PushSharp を使用しています。アプリが実行されていないとき (たとえば、再起動後) にプッシュ通知を受け取るのに問題があります。サービスコードは次のとおりです。

[BroadcastReceiver(Permission=GCMConstants.PERMISSION_GCM_INTENTS)]
    [IntentFilter(new string[] { GCMConstants.INTENT_FROM_GCM_MESSAGE }, Categories = new string[] { "com.xxx" })]
    [IntentFilter(new string[] { GCMConstants.INTENT_FROM_GCM_REGISTRATION_CALLBACK }, Categories = new string[] { "com.xxx" })]
    [IntentFilter(new string[] { GCMConstants.INTENT_FROM_GCM_LIBRARY_RETRY }, Categories = new string[] { "com.xxx" })]
    [IntentFilter(new[] { Android.Content.Intent.ActionBootCompleted })]
    public class PushHandlerBroadcastReceiver : PushHandlerBroadcastReceiverBase<PushHandlerService>
    {
        //IMPORTANT: Change this to your own Sender ID!
        //The SENDER_ID is your Google API Console App Project ID.
        //  Be sure to get the right Project ID from your Google APIs Console.  It's not the named project ID that appears in the Overview,
        //  but instead the numeric project id in the url: eg: https://code.google.com/apis/console/?pli=1#project:785671162406:overview
        //  where 785671162406 is the project id, which is the SENDER_ID to use!
        public static string[] SENDER_IDS = new string[] {"1234"};

        public const string TAG = "PushSharp-GCM";
    }

作成される appManifest は次のとおりです。

 <receiver android:permission="com.google.android.c2dm.permission.SEND" android:name="xxx.PushHandlerBroadcastReceiver">
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.xxx" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
      </intent-filter>
      <intent-filter>
        <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
        <category android:name="com.xxx" />
      </intent-filter>
      <intent-filter>
        <action android:name="com.google.android.gcm.intent.RETRY" />
        <category android:name="com.xxx" />
      </intent-filter>
    </receiver>
    <service android:name="xxx.PushHandlerService" />

私のサービスコードは非常に基本的です:

[Service] //Must use the service tag
    public class PushHandlerService : PushHandlerServiceBase
    {
        public PushHandlerService () : base (PushHandlerBroadcastReceiver.SENDER_IDS)
        {
        }

        protected override void OnRegistered (Context context, string registrationId)
        {
            ...
        }

        protected override void OnUnRegistered (Context context, string registrationId)
        {
            ...

        }

        protected override void OnMessage (Context context, Intent intent)
        {
            ...
        }

        protected override bool OnRecoverableError (Context context, string errorId)
        {
            ...
        }

        protected override void OnError (Context context, string errorId)
        {
            ...
        }

        void createNotification (string title, string desc, Intent intent)
        {
            ...
        }
    }

何か不足していますか?電話を再起動してもサービスが開始されないのはなぜですか。放送受信機で何かをする必要がありますか? サービス コンストラクターでプッシュ通知に登録する必要がありますか (アプリがまだ開始されていない場合を処理するため)。

4

1 に答える 1