【问题标题】:I receive push notifications on ios but not on Android我在 ios 上收到推送通知,但在 Android 上没有
【发布时间】:2018-12-20 17:48:08
【问题描述】:

我需要有关 android 平台上 xamarin.forms 项目的通知方面的帮助。

OnTokenRefresh 方法效果很好。我正确创建了令牌并将其发送到我的服务器,但问题是当我发送推送时它从未进入 OnMessageReceived 方法。在 IOS 中一切正常。

我的清单 > 接收者 =>

<?xml version="1.0" encoding="utf-8"?><manifest
xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.sademo.SademoEvent" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_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.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application android:label="SademoEvent.Android">
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyDxmjIsYXJ1OMWpqqheenbBoK5GKLWzAvg" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:enabled="true" 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>
    <provider android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}.fileprovider" 
      android:exported="false" android:grantUriPermissions="true">
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" 
                 android:resource="@xml/file_paths"></meta-data>
    </provider>
</application>

我的 FirebaseInstanceIdService 实施 =>

[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class MyFirebaseIIDService : FirebaseInstanceIdService
{
    const string TAG = "MyFirebaseIIDService";
    public override void OnTokenRefresh()
    {
        var refreshedToken = FirebaseInstanceId.Instance.Token;
        Log.Debug(TAG, "Refreshed token: " + refreshedToken);
        Helper.Settings.PlatformSNS = refreshedToken;
    }
}

我的 FirebaseMessagingService 实施 =>

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class MyFirebaseMessagingService : FirebaseMessagingService
{
    const string TAG = "MyFirebaseMsgService";
    public override void OnMessageReceived(RemoteMessage message)
    {
        base.OnMessageReceived(message);
        Log.Debug(TAG, "-------------------------------ES UN MENSAJE-------------------------------");
        Log.Debug(TAG, "From: " + message.From);
        Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
        
    }
}

已解决

问题出在(或者我认为是)包名中。 旧 => com.mycompany.Company。 新 => com.mycompany.company。

使用新包一切正常。

【问题讨论】:

  • 那么,它是什么?标题说Android可以工作。在问题中它说 Android 不起作用。
  • 这是一个错误,已修复。谢谢
  • 我遵循了该实施指南。 OnTokenFresh 效果很好,但 OnMessageReceived 不行

标签: android xamarin xamarin.forms xamarin.android firebase-cloud-messaging


【解决方案1】:

在你的清单中试试这个。

  <?xml version="1.0" encoding="utf-8"?><manifest
xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.sademo.SademoEvent" android:installLocation="preferExternal">
<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_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.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  <permission android:name="android.permission.C2D_MESSAGE" android:protectionLevel="signature" />
  <uses-permission android:name="android.permission.C2D_MESSAGE" />
<application android:label="SademoEvent.Android">
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyDxmjIsYXJ1OMWpqqheenbBoK5GKLWzAvg" />
      <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="yourAplicationName" />
        </intent-filter>
      </receiver>
    <provider android:name="android.support.v4.content.FileProvider" 
      android:authorities="${applicationId}.fileprovider" 
      android:exported="false" android:grantUriPermissions="true">
        <meta-data android:name="android.support.FILE_PROVIDER_PATHS" 
                 android:resource="@xml/file_paths"></meta-data>
    </provider>
</application>



        <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:enabled="true" 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>

【讨论】:

  • 你试试我的解决方案?
  • 我试过了,但他没有编译我。他告诉我一个错误,我不知道他为什么这样做。 imgur.com/a/zJFuTIQ 。我已将 companyname 更改为我的包裹名称,但还是一样。
  • 您需要将“${applicationId}”更改为您的项目名称。
  • 我已经改过了,但还是一样。 ApplicationId 到底是什么?包裹?我的包不是 com.companyname.OtherName 而是 com.otherName.OtherName。这可能是问题吗?
  • 是的,您需要在应用程序和 Firebase 中具有相同的包名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2016-03-08
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
相关资源
最近更新 更多