[英]how to send push notification to the android device using FCM by java server?
[英]How to send data messages to single device using FCM in android
我是使用Firebase cloud messaging
新手,想將帶有數據的消息或通知發送到單個設備。 我已向所有設備發送通知,但不知道如何將其發送到單個目標設備。 我瀏覽了許多網站和教程,但沒有運氣。
從我正在關注的一個教程中,我在我的
主活動.java :
package in.w3dev.fcm2;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import com.google.firebase.iid.FirebaseInstanceId;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
return;
}
String token = task.getResult().getToken();
String msg = getString(R.string.fcm_token, token);
Log.d(TAG, msg);
}
});
}
}
但它顯示error : can't resolve symbol getInstanceId(), InstanceResultId
。 由於某種原因,所有以粗體顯示的事情都沒有得到解決。 我已經按照 android studio 右側 FCM 窗口中的描述正確地制作了擴展FirebaseInstanceIdService
和FirebaseMessagingService
服務。 請告訴我如何解決這些錯誤或使用 FCM 向單個設備發送消息的其他方式。
另外,是否有可能由於我的應用程序中運行的 Firebase 的早期版本而無法導入InstanceResultId
類?
我嘗試升級版本,但它再次顯示了一堆錯誤,因此我僅將其保留為11.0.4
。
這是 app 文件夾中的 Gradle 文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "in.w3dev.fcm2"
minSdkVersion 19
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.firebase:firebase-messaging:20.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
}
apply plugin: 'com.google.gms.google-services'
要將推送通知發送到特定設備,您的后端服務器需要存儲設備令牌並向該令牌發送通知。
您可以檢索當前的設備令牌並發送到服務器,如下所示。
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
return;
}
// Get new Instance ID token and send to server
String token = task.getResult().getToken();
sendTokenToServer(token);
}
});
然后,您的服務器將為您提供該令牌以向該設備發送推送通知。
請記住,您不能使用 firebase 控制台將通知直接發送到特定設備,因為它沒有 UI 控制。 但是你可以使用postman來測試。
更新:我解決了這個問題。 我將 android studio 更新為最新版本,同時還更新了 gradle 和所有其他內容,並添加了最新的 firebase 版本依賴項,代碼運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.