官方文档:
向后台应用发送测试消息 | Firebase Cloud Messaging
1、根级(项目级)Gradlegradle的dependencies中添加:
dependencies {
...
// Add the dependency for the Google services Gradle plugin
classpath 'com.google.gms:google-services:4.3.10'
}
2、模块(应用级)Gradle 中添加 Google 服务插件:
plugins {
id 'com.android.application'
// Add the Google services Gradle plugin
id 'com.google.gms.google-services'
...
}
或者
apply {
plugin 'com.android.application'
// Add the Google services Gradle plugin
plugin "com.google.gms.google-services"
}
添加 Firebase Cloud Messaging Android 库的依赖项:(按官方的应该也是可以的)
implementation(platform("com.google.firebase:firebase-bom:32.3.1"))
implementation("com.google.firebase:firebase-analytics-ktx")
// implementation("com.google.firebase:firebase-auth-ktx")
implementation("com.google.firebase:firebase-firestore-ktx")
implementation("com.google.firebase:firebase-messaging")
// Firebase Cloud Messaging (Kotlin)
implementation("com.google.firebase:firebase-messaging-ktx")
3、消息接收
AndroidManifest.xml中添加,接受类
<service
android:name=".BillionFirebaseMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import com.game.base.sdk.BaseSDK;
import com.game.base.sdk.Events;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.google.gson.Gson;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Locale;
import java.util.Map;
import java.util.jar.JarException;
import java.lang.Boolean;
import game.billion.block.blast.bbb.MainActivity;
import game.billion.block.blast.bbb.R;
import kotlin.Pair;
public class BillionFirebaseMessagingService extends FirebaseMessagingService {
private String channelID = "game.puzzle.block.billion.pro.notification";
private String channelName = "messageName";
int notifyID = 101010;
//监控令牌的生成
@Override
public void onNewToken(@NonNull String token) {
super.onNewToken(token);
Log.d("BillionFirebaseMessagingService", "onNewToken:"+token);
}
//监控推送的消息
@Override
public void onMessageReceived(@NonNull RemoteMessage mge) {
super.onMessageReceived(mge);
Log.d("BillionFirebaseMessagingService", "From:"+mge.getFrom());
Log.d("BillionFirebaseMessagingService", "data:"+mge.getData());
Map<String,String> dt = mge.getData();
String ti =dt.get("title"); //标题(多语言),JSON字符串
try {
if (ti != null && !ti.isEmpty())
{
JSONObject json =new JSONObject(ti);
String language = Locale.getDefault().getLanguage();
if (language=="pt")
{
//获取巴西语
String resTitle = json.getString("pt");
if (resTitle != null && !resTitle.isEmpty())
{
//显示通知
addNotification(resTitle);
}
}else {
String resTitle = json.getString("en");
if (resTitle != null && !resTitle.isEmpty())
{
//显示通知
addNotification(resTitle);
}
}
}
} catch (JSONException e) {
}
String mgeId = mge.getMessageId();
String intent =dt.get("intent");
String strId =dt.get("sid");
Pair<String, String>[] params = new Pair[3];
params[0] = new Pair<>("message_id", mgeId);
params[1] = new Pair<>("type", intent);
params[2] = new Pair<>("sid", strId);
Events.push("100410", params);
}
//添加提示
private void addNotification(String resTitle )
{
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) {
NotificationManagerCompat managerCompat = NotificationManagerCompat.from(this);
NotificationChannel nc=newNotificationChannel(channelID, channelName);
if (nc!=null)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
managerCompat.createNotificationChannel(nc);
}
}
Intent nfIntent = new Intent(this, MainActivity.class);
PendingIntent pendingIntent ;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pendingIntent=PendingIntent.getActivity(this, 0, nfIntent, PendingIntent.FLAG_IMMUTABLE);
} else {
pendingIntent=PendingIntent.getActivity(this, 0, nfIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
}
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, channelID);
builder.setContentIntent(pendingIntent); // 设置PendingIntent
builder.setSmallIcon(R.drawable.notification); // 设置状态栏内的小图标
builder.setVisibility(NotificationCompat.VISIBILITY_PUBLIC);
builder.setStyle(new NotificationCompat.BigTextStyle());
builder.setContentTitle(getString(R.string.app_name));
builder.setContentText(resTitle);
builder.setWhen(System.currentTimeMillis());
builder.setAutoCancel(true);
managerCompat.notify(notifyID, builder.build());
}
}
private NotificationChannel newNotificationChannel(String cId, String cName)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel =new NotificationChannel(cId, channelName, NotificationManager.IMPORTANCE_HIGH);
channel.setSound(null, null);
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
return channel;
}
return null;
}
}
4、测试(google-services.json 记得放应用级中)
a、获取tokn
//在firebase中检查google版本是否有问题
GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("Firebase", "onComplete: Play services OKAY");
//firebase 推送 (FCM)获取token(FCM令牌)
FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful())
{
Log.w("Firebase", "Fetching FCM registration token failed", task.getException());
return;
}
// Get new FCM registration token
String ss= task.getResult();
Log.d("Firebase", "onComplete:token getResult "+ss);
}
});
} else {
// Show the user some UI explaining that the needed version
// of Play services Could not be installed and the app can't run.
}
}
});
b、用tokn就能对固定手机发送消息