0

link을 사용하여 Xamarin 원격 알림을 구현했지만 GCM에서 메시지를 가져올 수 없습니다. 내가 놓친 게 무엇입니까?Xamarin GCM OnMessageReceived가 호출되지 않았습니다.

내 ListenerService :

[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" }, Categories = new string[] { "MYPACKGAGE NAME IS HERE I WROTE" })] 
public class MyGcmListenerService : GcmListenerService 
{ 
    public override void OnMessageReceived(string from, Bundle data) 
    { 
     var message = data.GetString("message"); 
     Log.Debug("MyGcmListenerService", "From: " + from); 
     Log.Debug("MyGcmListenerService", "Message: " + message); 
     SendNotification(message); 
    } 

    void SendNotification(string message) 
    { 
     var intent = new Intent(this, typeof(MainActivity)); 
     intent.AddFlags(ActivityFlags.ClearTop); 
     var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot); 

     var notificationBuilder = new Notification.Builder(this) 
      .SetSmallIcon(Resource.Drawable.unknown) 
      .SetContentTitle("GCM Message") 
      .SetContentText(message) 
      .SetAutoCancel(true) 
      .SetContentIntent(pendingIntent); 

     var notificationManager = (NotificationManager)GetSystemService(Context.NotificationService); 
     notificationManager.Notify(0, notificationBuilder.Build()); 
    } 
} 

내 매니페스트 파일 :

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="MYPACKGAGE NAME" android:installLocation="auto" android:versionCode="1" android:versionName="1"> 
<uses-sdk android:minSdkVersion="15" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
<uses-permission android:name="android.permission.READ_PROFILE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="MYPACKGAGE NAME.permission.C2D_MESSAGE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<permission android:name="MYPACKGAGE NAME.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
<application android:label="MYAPP" android:icon="@drawable/Icon"></application> 
<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="MYPACKGAGE NAME" /> 
    </intent-filter> 
</receiver></manifest> 

내 서버는 message_id와 성공 응답을 받았지만, 그 OnMessageReceived 방법은 호출되지 않습니다 내가 토큰을 얻을 수 있습니다.

+0

su 해당 registration_token을 사용하고 있습니까? –

+0

topic :/topics/phonenumber가 토픽을 구독하고 토큰이 정확한지 확인합니다. – KubixSoftware

+0

며칠 전에 동일한 효과가 발생했습니다. 주제가 작성 될 때까지 시간이 걸립니다. Firebase Developer Console에서 사용 가능한 즉시 볼 수 있습니다. –

답변

0

해결책을 찾았습니다. 그것은 내 실수

<application android:label="MYAPP" android:icon="@drawable/Icon">/application> 
<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="MYPACKGAGE NAME" /> 
</intent-filter> 
</receiver> 
</manifest> 

의에게 그것은

<application android:label="MYAPP" 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="MYPACKGAGE NAME" /> 
</intent-filter> 
</receiver> 
</application> 
</manifest> 

응용 프로그램 태그는 리시버의 부모

0

응용 프로그램 태그 AndroidMenifest.xml에서 수신기의 부모가해야합니다!

FCM과 GCM의 경우 대소 문자가 같습니다.

< 응용 프로그램 안드로이드 : allowBackup = "true"로 안드로이드 : 아이콘 = "@ 밉맵/아이콘"안드로이드 : 라벨 = "@ 문자열/APP_NAME">

- START 수동 중포 기지 추가 -

< 리시버 android : name = "com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"...........................

- 수동 파이어베이스 추가 사항 - </신청>

관련 문제