Firebase通知トークンが更新されるたびに通知トークンを取得するために使用されていた、このクラスを知っていることを願っています。このクラスから更新されたトークンを取得します。
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
FCMを実装したいのでこれを使用するために、MyClassをFirebaseInstanceIdService
から拡張しました。
しかし、 FirebaseInstanceIdServiceを表示することは推奨されません
誰もがこれを知っていますか?、これは廃止予定であるため、更新されたトークンを取得するためにこれの代わりに使用するメソッドまたはクラスは何ですか。
私は使っています:implementation 'com.google.firebase:firebase-messaging:17.1.0'
私はこれについて何も述べられていないのと同じ文書をチェックした。 : FCMセットアップ文書
_ update _
この問題は修正されました。
GoogleがFirebaseInstanceService
を非推奨にしたので、
私は方法を見つけるために質問をしました、そして私は私達が FirebaseMessagingService からトークンを得ることができることを知るようになりました、
以前と同様に、質問文書は更新されていませんがGoogleドキュメントは更新されていますが、詳細については、Googleドキュメントを参照してください。 FirebaseMessagingService
OLD From:FirebaseInstanceService(廃止予定)
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
}
新規作成者:FirebaseMessagingService
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("NEW_TOKEN",s);
}
ありがとう。
firebaserはこちら
FirebaseInstanceIdService
の参照ドキュメント を確認してください。
このクラスは非推奨です。
onNewToken
でFirebaseMessagingService
をオーバーライドすることに賛成です。それが実行されれば、このサービスは安全に削除することができます。
FirebaseMessagingService
のJavaDocでは、onNewToken
メソッドについてまだ言及していません。更新されたすべてのドキュメントがまだ公開されていないようです。私は、発行された参照文書の最新版を入手するため、およびガイド内のサンプルも最新版にするために、内部問題を提出しました。
それまでの間、古い/推奨されない呼び出しと新しい呼び出しの両方が機能するはずです。どちらかに問題がある場合は、コードを投稿してください。
YesFirebaseInstanceIdService
は廃止予定です
FROM DOCS: -このクラスは非推奨です。
FirebaseMessagingService
のoverriding onNewToken
に賛成です。それが実行されれば、このサービスは安全に削除することができます。
FCMトークンを取得するためにFirebaseInstanceIdService
サービスを使用する必要はありませんFirebaseInstanceIdService
サービスを安全に削除できます。
Token
に@Override onNewToken
FirebaseMessagingService
を入れる必要があります
サンプルコード
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
Log.e("NEW_TOKEN", s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> params = remoteMessage.getData();
JSONObject object = new JSONObject(params);
Log.e("JSON_OBJECT", object.toString());
String NOTIFICATION_CHANNEL_ID = "Nilesh_channel";
long pattern[] = {0, 1000, 500, 1000};
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications",
NotificationManager.IMPORTANCE_HIGH);
notificationChannel.setDescription("");
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.setVibrationPattern(pattern);
notificationChannel.enableVibration(true);
mNotificationManager.createNotificationChannel(notificationChannel);
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = mNotificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID);
channel.canBypassDnd();
}
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage.getNotification().getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true);
mNotificationManager.notify(1000, notificationBuilder.build());
}
}
このようにマニフェストファイルに
FirebaseMessagingService
を登録する必要があります。
<service
Android:name=".MyFirebaseMessagingService"
Android:stopWithTask="false">
<intent-filter>
<action Android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
.getToken();
を使用するよりもあなたのアクティビティでトークンを取得する必要がある場合は、getInstanceId ()
も推奨されません。
今度はトークンを生成するために getInstanceId ()
を使う必要があります
getInstanceId ()
このID
プロジェクト用のFirebase
と自動生成されたトークンを返します。
まだインスタンスIDが存在しない場合は、これによってインスタンスIDが生成され、Firebaseバックエンドに定期的に情報の送信が開始されます。
戻り値
InstanceIdResult
とID
を保持するtoken
を介して結果を見るために使用できるタスク。サンプルコード
FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MyActivity.this, new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult instanceIdResult) {
String newToken = instanceIdResult.getToken();
Log.e("newToken",newToken);
}
});
これがkotlinの作業コードです。
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(p0: String?) {
}
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
val NOTIFICATION_CHANNEL_ID = "Nilesh_channel"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val notificationChannel = NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications", NotificationManager.IMPORTANCE_HIGH)
notificationChannel.description = "Description"
notificationChannel.enableLights(true)
notificationChannel.lightColor = Color.RED
notificationChannel.vibrationPattern = longArrayOf(0, 1000, 500, 1000)
notificationChannel.enableVibration(true)
notificationManager.createNotificationChannel(notificationChannel)
}
// to diaplay notification in DND Mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID)
channel.canBypassDnd()
}
val notificationBuilder = NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID)
notificationBuilder.setAutoCancel(true)
.setColor(ContextCompat.getColor(this, R.color.colorAccent))
.setContentTitle(getString(R.string.app_name))
.setContentText(remoteMessage!!.getNotification()!!.getBody())
.setDefaults(Notification.DEFAULT_ALL)
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_background)
.setAutoCancel(true)
notificationManager.notify(1000, notificationBuilder.build())
}
}
この:
FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
廃止予定のソリューションであるとします。
FirebaseInstanceId.getInstance().getToken()
_編集_
タスクがまだ完了していない場合、FirebaseInstanceId.getInstance().getInstanceId().getResult().getToken()
は例外を生成する可能性があるため、(.addOnSuccessListener
を使用して)説明されているメソッド魔女Nilesh Rathodがそれを実行する正しい方法です。
コトリン:
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener(this) { instanceIdResult ->
val newToken = instanceIdResult.token
Log.e("newToken", newToken)
}
KOTLINの場合: - DBまたは共有設定に Token を保存する場合は、 FirebaseMessagingServiceのonNewTokenをオーバーライドします
override fun onNewToken(token: String?) {
super.onNewToken(token)
}
実行時にトークンを取得します。
FirebaseInstanceId.getInstance().instanceId
.addOnSuccessListener(this@SplashActivity) { instanceIdResult ->
val mToken = instanceIdResult.token
println("printing fcm token: $mToken")
}
Kotlinは他の答えに示されているものよりもさらに単純なコードを可能にします。
更新されるたびに新しいトークンを取得するには
class MyFirebaseMessagingService: FirebaseMessagingService() {
override fun onNewToken(token: String?) {
Log.d("FMS_TOKEN", token)
}
...
}
実行時にどこからでもトークンを取得するには
FirebaseInstanceId.getInstance().instanceId.addOnSuccessListener {
Log.d("FMS_TOKEN", it.token)
}
FirebaseinstanceIdService
は非推奨です。 「FirebaseMessagingService」を使用する必要があります
画像を海にしてください:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.e("NEW_TOKEN",s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
}
}