nya*_*ger 5 android google-cloud-messaging xamarin.forms
当应用程序完全关闭时,我正在尝试在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
显现:
<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>
Run Code Online (Sandbox Code Playgroud)GCM监听器服务:
[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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
}
我仍在掌握 Xamarin 和 GCM 通知,所以我的理解可能是错误的。我的理解是我可以在应用程序启动时启动广播接收器。这将反过来启动一个可以监听推送通知的服务(在我的例子中是 MyGcmListenerService)。我的第一个问题是广播接收器不会在应用程序启动时启动(按照这个答案:尝试在 Android 启动时启动服务)。其次,是否可以调用 MyGcmListenerService 以开始收听我正在尝试做的通知。我试过使用 GCMIntentService,但它似乎已被弃用: 当应用程序关闭时推送通知
先感谢您!!
小智 1
我在 Xamarin Native - Android 中使用了以下配置和代码段,并且可以在应用程序关闭时看到通知。
Android 清单.xml
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" 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="${applicationId}" />
</intent-filter>
</receiver>
<service android:name="HEET.Droid.ViewController.Login.FireBaseIIDService" android:permission="false" android:stopWithTask="false">
<intent-filter>
<action android:name="com.google.firebase.messaging_event" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
根据最新版本,在 FireBaseIIDService 意图服务类中, onMessageReceived(RemoteMessage msg) 将在接收每条消息时调用。
[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class FireBaseIIDService : FirebaseMessagingService{
public override void OnMessageReceived (RemoteMessage msg) {
Notification.Builder builder = new Notification.Builder(this, "my_notification_channel");
builder.SetSmallIcon(Resource.Drawable.circle);
var intent = new Intent(this, typeof(DashboardActivity));
intent.AddFlags(ActivityFlags.ClearTop);
PendingIntent pendingIntent = PendingIntent.GetActivity(this, 0, intent, 0);
builder.SetContentIntent(pendingIntent);
builder.SetLargeIcon(BitmapFactory.DecodeResource(Resources, Resource.Drawable.circle));
builder.SetContentTitle(Header);
builder.SetContentText(body);
builder.SetDefaults(NotificationDefaults.Sound);
builder.SetAutoCancel(true);
NotificationManager notificationManager = (NotificationManager)GetSystemService(NotificationService);
notificationManager.Notify(1, builder.Build());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |