質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

1回答

4866閲覧

KotlinでType mismatchと表示される

morizoh

総合スコア16

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2020/07/01 10:13

編集2020/07/04 05:30

前提・実現したいこと

Kotlinを使ってFirebaseからFCMで通知を送るアプリをAndroid Studioで作っています。
以下のページを参考にMyFirebaseMessagingServiceクラスを作成したところ
onMessageReceivedメソッドのNotificationCompat.Builder(this, CHANNEL_ID)の部分でType mismatchと表示されました。
型が違うと言われているのは分かるのですがどうすればいいのか分からず詰まってしまいました。
エラーを解消するにはどうすれば良いでしょうか?
https://www.aizulab.com/blog/android-firebase-fcm/

発生している問題・エラーメッセージ

Type mismatch. Required: Context Found: MyFirebaseMessagingService

該当のソースコード

Kotlin

1package com.example.watchdog 2 3import android.app.NotificationChannel 4import android.app.NotificationManager 5import android.os.Build 6import android.util.Log 7import androidx.core.app.NotificationCompat 8import androidx.core.content.ContextCompat.getSystemService 9import com.google.firebase.messaging.FirebaseMessagingService 10import com.google.firebase.messaging.RemoteMessage 11 12class MyFirebaseMessagingService : FirebaseMessagingService() { 13 14 companion object { 15 16 private const val CHANNEL_ID = "com.aizulab.sample.fcm.MY_CHANNEL" 17 } 18 19 override fun onMessageReceived(remoteMessage: RemoteMessage?) { 20 remoteMessage?.data?.also { data -> 21 val title = data["title"] 22 val message = data["message"] 23 24 // Android O(8.0) 以上で通知を表示する場合はチャンネルIDを指定する必要があるので 25 // 処理を分けます 26 val builder = if (Build.VERSION_CODES.O <= Build.VERSION.SDK_INT) { 27 NotificationCompat.Builder(this, CHANNEL_ID) //ここがエラーになる 28 } 29 else { 30 NotificationCompat.Builder(this) //ここがエラーになる 31 } 32 val notification = builder 33 .setSmallIcon(R.mipmap.ic_launcher) // アイコンは指定必須です 34 .setContentTitle(title) // 通知に表示されるタイトルです 35 .setContentText(message) // 通知内容を設定します 36 .build() 37 // 通知を表示します 38 val nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager 39 nm.notify(0, notification) 40 } 41 } 42 43 override fun onNewToken(instanceToken: String?) { 44 // テストで使用するため、ログにトークンを出力します 45 Log.i("SampleFCM", "token: $instanceToken") 46 47 // 同時に通知の設定をここでしてしまいます 48 val nm = getSystemService(NOTIFICATION_SERVICE) as NotificationManager 49 // Android O(8.0) 以上で通知を使用する場合は通知チャンネルを作成する必要があります 50 if (Build.VERSION_CODES.O <= Build.VERSION.SDK_INT) { 51 var channel = nm.getNotificationChannel(CHANNEL_ID) 52 if (channel == null) { 53 channel = NotificationChannel( 54 CHANNEL_ID, 55 "プッシュ通知用のチャンネルです", 56 NotificationManager.IMPORTANCE_HIGH) 57 nm.createNotificationChannel(channel) 58 } 59 } 60 } 61}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

build.gradleに記述するライブラリーのバージョンを最新にすること、KotlinソースファイルでSDKの仕様が変わったからかoverrideする関数の型が合わないので3行ほど微修正を加えたこと以外は、参考にしたページ通りの作業でエミュレーターで通知を受け取るところまで動作確認できました。ですから、「確実に作れば動く」ことは間違いないです。

gradle

1dependencies { 2 3 implementation 'com.google.firebase:firebase-messaging:20.2.1' 4 5}

kotlin

1 override fun onMessageReceived(remoteMessage: RemoteMessage) { 2 remoteMessage.data.also { data -> 3 4 (中略) 5 6 7 override fun onNewToken(instanceToken: String) { 8 9 (以下略) 10

エラーメッセージが出たという具体的な箇所が質問からはよくわからないのですが、「MyFirebaseMessagingService.ktの何行目のどこどこ」とか、そういうレベルで説明できませんか?

投稿2020/07/01 14:03

編集2020/07/01 14:28
keicha_hrs

総合スコア6768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morizoh

2020/07/04 05:34

ご丁寧にありがとうございます。情報が足りず申し訳ありません・・ エラーはMyFirebaseMessagingService.ktの29,32行目のNotificationCompat.Builder(this)で発生しています。
keicha_hrs

2020/07/04 06:25

ご提示いただいたソースファイル通りであればそうはならないと思うのですが・・・。 class MyFirebaseMessagingService : FirebaseMessagingService() { のコロン以降は間違いなく記述されていますか?この記述が抜けていたら、確かに質問通りのエラーになるでしょうが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問