0

Firebaseは、Android Mに着信するメッセージの通知チャンネルIDを設定していないようです。私はthis guideに従っており、バックグラウンドにあります。Firebaseクラウドメッセージングの背景通知チャンネルIDがAndroidで設定されていない

ここに私のアプリケーションコードとマニフェストがあります。

public class MainActivity extends AppCompatActivity { 

    private void registerNotificationChannel(String id, String name, String description) { 
     NotificationManager mNotificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     int importance = NotificationManager.IMPORTANCE_HIGH; 
     NotificationChannel mChannel = new NotificationChannel(id, name, importance); 
     mChannel.setDescription(description); 
     mChannel.enableLights(true); 
     mChannel.setLightColor(Color.RED); 
     mChannel.enableVibration(true); 
     mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400}); 
     mNotificationManager.createNotificationChannel(mChannel); 
    } 

    //private BroadcastReceiver isms; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Log.d(TAG,"MainActivity.oncreate. token is:" + FirebaseInstanceId.getInstance().getToken()); 

     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     registerNotificationChannel("default","default","all other notifications"); 
     registerNotificationChannel("channel1","channel1","notification channel 1"); 
     registerNotificationChannel("channel2","channel2","notification channel 2"); 
    } 

    @Override protected void onDestroy() { 
     super.onDestroy(); 
    } 

} 

public class MyFirebaseMessagingService extends FirebaseMessagingService { 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     Log.d(TAG, "firebase message received"); 
     if (remoteMessage.getNotification() != null) { 
      Map<String,String> data = remoteMessage.getData(); 
      for (Map.Entry<String, String> entry : data.entrySet()) 
      { 
       Log.d(TAG, "data: " + entry.getKey() + "/" + entry.getValue()); 
      } 
      Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
     } 

    } 
} 

    public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 
    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     Log.d(TAG, "Refreshed firebase " + 
       "" + 
       "" + 
       "token: " + refreshedToken); 
    } 
} 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="org.phauna.alerter"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:roundIcon="@mipmap/ic_launcher_round" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/AppTheme.NoActionBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <meta-data 
      android:name="com.google.firebase.messaging.default_notification_channel_id" 
      android:value="default"/> 

     <service android:name=".MyFirebaseMessagingService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
      </intent-filter> 
     </service> 
     <service 
      android:name=".MyFirebaseInstanceIDService"> 
      <intent-filter> 
       <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
      </intent-filter> 
     </service> 

    </application> 

</manifest> 

あなたが見ることができるように、それはhereを言うように、私は間違いなく私の通知チャネルを登録しています。私のデバイスからのこのスクリーンショットには、チャンネルが同様に登録されている確認:

enter image description here

はここで重要な部分です。 APIバージョン25をターゲットにすると、バックグラウンド通知が届きます。バージョン26をターゲットに設定するとすぐに、私はしません。は代わりに、 私はlogcatで、このエラーメッセージが表示されます。

10-11 12:40:00.925 899 8910 E NotificationService: No Channel found for pkg=org.phauna.alerter, channelId=null, id=0, tag=GCM-Notification:286245598, opPkg=org.phauna.alerter, callingUid=10179, userId=0, incomingUserId=0, notificationUid=10179, notification=Notification(channel=null pri=0 contentView=null vibrate=null sound=content://settings/system/notification_sound defaults=0x0 flags=0x10 color=0x00000000 vis=PRIVATE) 

Firebaseコンソールから送信このスクリーンショットに示されているように、私は間違いなく、チャネルIDを設定しています:

enter image description here

私が持っています

curl -X POST --header "Authorization: key=<redacted>" --Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"<redacted>\",\"data\":{\"android_channel_id\":\"channel1\"},\"notification\":{\"body\":\"this is a testfoobar\"}}" 

いずれの場合も、メッセージは自分のデバイスbに届きますutにはchannelIdがありません(上記のログメッセージでchannelId = nullと表示されています)。

フォアグラウンドでは、サービスの通知を受け取り、チャネルIDを手動で固定することができます(メッセージのペイロードにチャネルIDをエンコードする必要がある場合でも)。しかし、私はバックグラウンドでの通知も必要です。私が知る限り、それはFirebaseライブラリが正しいことです。

+1

'firebase-messaging'のどのバージョンをビルドしていますか? 11.4.2でビルドされたテストアプリケーションでは、未登録のチャンネルIDの通知を受け取ると、通知とこのログメッセージが表示されます: 'W/FirebaseMessaging:リクエストされた通知チャンネル(channel_X)はアプリケーションによって作成されていません。マニフェストの設定、またはデフォルトの値が使用されます。 –

+0

うーん、それは問題かもしれません。 firebase-messagingパッケージをインストールするためにfirebase assistantを使用しましたが、自動的に10.0.1が選択されました。それを更新してやり直してみましょう。 –

答えて

2

Firebase Release Notesが通知チャネルのサポートは、バージョン10.2.6(2017年5月17日)に追加されたことを示します。

は、Android Oの通知チャネルのサポートが追加されました。 Androidクライアントは アプリケーションマニフェスト のデフォルト通知チャネルを指定できます。これは、ダウンストリームメッセージに notification_channelパラメータが含まれていない場合に使用されます。

バージョン10.2.6以降を使用するようにビルドを更新します。

+0

私は11.4.2にアップデートされ、私の問題は修正されました!ありがとうBob! –

+0

* android_channel_id ** @Bobどこにいるのか分かりません。 –

+0

@MaheshGawhane:あなたが何を意味するか分かりません。たぶん既定のチャンネル[ここで説明](https://firebase.google.com/docs/cloud-messaging/android/client#manifest) –

関連する問題