【发布时间】:2016-05-02 16:48:48
【问题描述】:
当应用程序完全关闭时,我正在尝试在 Xamarin 中处理 GCM 推送通知。按照 Xamarin 推送通知教程,我能够从 GCM 接收远程/推送通知,但是一旦我关闭应用程序,我就没有收到。到目前为止,这是我尝试过的:
1.广播接收器:
public class MyGCMBroadcastReceiver : BroadcastReceiver {
public override void OnReceive (Context context, Intent intent)
{
Intent gcmListenerServiceIntent = new Intent(context,typeof(MyGcmListenerService));
Console.WriteLine ("Starting Broadcast Receiver...");
context.StartService (gcmListenerServiceIntent);
}
}
-
清单:
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="za.co.snappyhome.snappy.permission.C2D_MESSAGE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.CALL_PRIVILEGED" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.VIBRATE" /> <application android:label="My App" android:theme="@style/AppTheme" 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="za.co.myapp.app" /> </intent-filter> </receiver> <receiver android:name="MyApp.Droid.Notifications.MyGCMBroadcastReceiver"> <intent-filter> <actionandroid:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> -
GCMListenerService:
[Service (Exported = false), IntentFilter (new [] { "com.google.android.c2dm.intent.RECEIVE" })] public class MyGcmListenerService : GcmListenerService { public override void OnMessageReceived (string from, Bundle data) { if (data.ContainsKey ("data")) { if (Xamarin.Forms.Application.Current != null) { String json = data.GetString("data"); MessagingCenter.Send<Xamarin.Forms.Application, string> (Xamarin.Forms.Application.Current, "NOTIFICATION_MESSAGE_RECEIVED", json); } } }}
我仍在处理 Xamarin 和 GCM 通知,所以我的理解可能是错误的。我的理解是我可以在应用程序启动时启动广播接收器。这将反过来启动一个可以监听推送通知的服务(在我的例子中是 MyGcmListenerService)。我的第一个问题是广播接收器没有在应用程序启动时启动(按照这个答案:Trying to start a service on boot on Android)。其次,是否可以调用 MyGcmListenerService 以开始收听通知,就像我正在尝试做的那样。我尝试过使用 GCMIntentService,但这似乎在一段时间前已被弃用: Push Notifications when app is closed
提前谢谢你!!
【问题讨论】:
标签: android google-cloud-messaging xamarin.forms