我正在尝试从 Firebase 控制台发送推送消息,但没有任何消息发送成功。
有这样一段代码:
package dem.corp.androidmessenger;
import static androidx.fragment.app.FragmentManager.TAG;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.messaging.FirebaseMessaging;
import java.util.HashMap;
import java.util.Map;
import dem.corp.androidmessenger.bottomnav.chats.ChatsFragment;
import dem.corp.androidmessenger.bottomnav.new_chat.NewChatFragment;
import dem.corp.androidmessenger.bottomnav.profile.ProfileFragment;
import dem.corp.androidmessenger.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
private ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//fcm
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "Fetching FCM registration token failed", task.getException());
return;
}
// Get new FCM registration token
String token = task.getResult();
// Log and toast
//String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, "222 token = " + token);
Toast.makeText(MainActivity.this, token, Toast.LENGTH_SHORT).show();
}
}); //END FCM
if (FirebaseAuth.getInstance().getCurrentUser()==null){
startActivity(new Intent(MainActivity.this, LoginActivity.class));
}
getSupportFragmentManager().beginTransaction().replace(binding.fragmentContainer.getId(), new ChatsFragment()).commit();
binding.bottomNav.setSelectedItemId(R.id.chats);
Map<Integer, Fragment> fragmentMap = new HashMap<>();
fragmentMap.put(R.id.chats, new ChatsFragment());
fragmentMap.put(R.id.new_chat, new NewChatFragment());
fragmentMap.put(R.id.profile, new ProfileFragment());
binding.bottomNav.setOnItemSelectedListener(item -> {
Fragment fragment = fragmentMap.get(item.getItemId());
getSupportFragmentManager().beginTransaction().replace(binding.fragmentContainer.getId(), fragment).commit();
return true;
});
}
}
从此代码中我获得一个令牌并将该令牌输入到 Firebase 控制台。
我没有在清单中配置任何东西。告诉我,为什么我收不到来自 FCM 的消息?
在 LogCat 中它说:
ndroidmessenger dem.corp.androidmessenger W Accessing hidden method Landroid/os/WorkSource;->add(I)Z (unsupported,test-api, reflection, allowed)
2025-02-01 12:53:26.688 6595-6820 ndroidmessenger dem.corp.androidmessenger W Accessing hidden method Landroid/os/WorkSource;->add(ILjava/lang/String;)Z (unsupported,test-api, reflection, allowed)
2025-02-01 12:53:26.688 6595-6820 ndroidmessenger dem.corp.androidmessenger W Accessing hidden method Landroid/os/WorkSource;->get(I)I (unsupported, reflection, allowed)
2025-02-01 12:53:26.688 6595-6820 ndroidmessenger dem.corp.androidmessenger W Accessing hidden method Landroid/os/WorkSource;->getName(I)Ljava/lang/String; (unsupported, reflection, allowed)
2025-02-01 12:53:26.718 6595-6824 FirebaseMessaging dem.corp.androidmessenger W Missing Default Notification Channel metadata in AndroidManifest. Default value will be used.
2025-02-01 12:53:26.727 6595-6824 Compatibil...geReporter dem.corp.androidmessenger D Compat change id reported: 160794467; UID 10192; state: ENABLED
并且文件显示如下内容:
Android Stdio 建议我使用管理器更改文件:我选中了所有框,但文件没有任何更改:
同时,我在宣言中补充了以下数据:
<meta-data
android:name="default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="high_importance_channel" />
救命,为什么我收不到 fcm 消息?