aru*_*nrk 47 android firebase firebase-cloud-messaging firebase-notifications
在新的Firebase中,在通知下,他们提到开发人员可以向特定设备发送通知.为此,在控制台中它要求一个FCM令牌.究竟是什么,我如何获得该令牌?
AL.*_*AL. 59
究竟是什么?
FCM令牌,或者通常称为registrationToken类似的
谷歌云的消息.如GCM文档中所述:
GCM连接服务器向客户端应用程序发出的ID,允许它接收消息.请注意,注册令牌必须保密.
我该如何获得该令牌?
更新:令牌仍然可以通过调用来检索getToken()然而,按照FCM的最新版本中,FirebaseInstanceIdService.onTokenRefresh()已被替换FirebaseMessagingService.onNewToken()-这在我的经验功能相同的方式onTokenRefresh()做.
老答案:
根据FCM文档:
在应用程序首次启动时,FCM SDK会为客户端应用程序实例生成注册令牌.如果要定位单个设备或创建设备组,则需要访问此令牌.
您可以通过扩展FirebaseInstanceIdService来访问令牌的值.确保已将服务添加到清单中,然后在onTokenRefresh的上下文中调用getToken,并记录该值,如下所示:
Run Code Online (Sandbox Code Playgroud)@Override public void onTokenRefresh() { // Get updated InstanceID token. String refreshedToken = FirebaseInstanceId.getInstance().getToken(); Log.d(TAG, "Refreshed token: " + refreshedToken); // TODO: Implement this method to send any registration to your app's servers. sendRegistrationToServer(refreshedToken); }每当生成新令牌时都会触发onTokenRefreshcallback,因此在其上下文中调用getToken可确保您访问当前可用的注册令牌.如果尚未生成令牌,FirebaseInstanceID.getToken()将返回null.
获得令牌后,您可以将其发送到您的应用服务器并使用您首选的方法存储它.有关API的完整详细信息,请参阅Instance ID API参考.
这是添加此gradle的简单步骤:
dependencies {
compile "com.google.firebase:firebase-messaging:9.0.0"
}
Run Code Online (Sandbox Code Playgroud)
GCM等清单中不需要额外的许可.像GCM一样,不需要接收器.使用FCM,com.google.android.gms.gcm.GcmReceiver会自动添加.
迁移您的侦听器服务
InstanceIDListenerService仅当您要访问FCM令牌时,才需要扩展服务.
如果你愿意,这是必需的
在清单中添加服务
<service
android:name=".MyInstanceIDListenerService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<service
android:name=".MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
更改MyInstanceIDListenerService为扩展FirebaseInstanceIdService,并更新代码以侦听令牌更新,并在生成新令牌时获取令牌.
public class MyInstanceIDListenerService extends FirebaseInstanceIdService {
...
/**
* Called if InstanceID token is updated. This may occur if the security of
* the previous token had been compromised. Note that this is also called
* when the InstanceID token is initially generated, so this is where
* you retrieve the token.
*/
// [START refresh_token]
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// TODO: Implement this method to send any registration to your app's servers.
sendRegistrationToServer(refreshedToken);
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请访问
他们在下面的发行说明中弃用了 getToken() 方法。相反,我们必须使用 getInstanceId。
https://firebase.google.com/docs/reference/android/com/google/firebase/iid/FirebaseInstanceId
Task<InstanceIdResult> task = FirebaseInstanceId.getInstance().getInstanceId();
task.addOnSuccessListener(new OnSuccessListener<InstanceIdResult>() {
@Override
public void onSuccess(InstanceIdResult authResult) {
// Task completed successfully
// ...
String fcmToken = authResult.getToken();
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Task failed with an exception
// ...
}
});
Run Code Online (Sandbox Code Playgroud)
要在同一个侦听器中处理成功和失败,请附加一个 OnCompleteListener:
task.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.isSuccessful()) {
// Task completed successfully
InstanceIdResult authResult = task.getResult();
String fcmToken = authResult.getToken();
} else {
// Task failed with an exception
Exception exception = task.getException();
}
}
});
Run Code Online (Sandbox Code Playgroud)
此外,FirebaseInstanceIdService 类已被弃用,他们在 FireBaseMessagingService 中提出了 onNewToken 方法来替代 onTokenRefresh,
您可以在此处参考发行说明, https://firebase.google.com/support/release-notes/android
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Use this code logic to send the info to your server.
//sendRegistrationToServer(s);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
103203 次 |
| 最近记录: |