- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在应用程序的版本 1 中实现了 UrbanAirship。现在,我在应用程序的版本 2 中扩展了 FirebaseMessagingService
。我没有在 onNewToken()
中收到能够将 token 发送到我的服务器的调用。我的样板代码看起来像
AndroidManifest.xml
<service
android:name=".services.fcm.PushMessageReceiver"
android:enabled="true"
android:exported="true"
android:stopWithTask="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
和接收者
public class PushMessageReceiver extends FirebaseMessagingService { ...
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
...
}
@Override
public void onNewToken(String s) {
Log.i(Config.LOGTAG, "######**** new token for fcm called");
Context ctx =ApplicationCustom.getContext();
SharedPreferences preferences = ctx.getSharedPreferences(Config.SHARED_PREFERENCES, Context.MODE_PRIVATE);
preferences.edit().putString(Config.SHARED_PREFS_DEVICE_TOKEN, s).apply();
Intent intent = new Intent(this, XmppConnectionService.class);
intent.setAction(XmppConnectionService.ACTION_FCM_TOKEN_REFRESH);
intent.putExtra("token", s);
startService(intent);
pushToServer();
}
public static void getToken() {
Log.i(Config.LOGTAG, "######**** get token for fcm called");
try {
Log.i(Config.LOGTAG, "######**** delete token for fcm called");
FirebaseInstanceId.getInstance().deleteInstanceId();
FirebaseInstanceId.getInstance().getInstanceId();
} catch (IOException e) {
e.printStackTrace();
Log.w(Config.LOGTAG, "######**** delete InstanceId failed", e);
}
FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(task
-> {
if (!task.isSuccessful()) {
Log.w(Config.LOGTAG, "getInstanceId failed", task.getException());
return;
}
Log.i(Config.LOGTAG, "######**** getInstanceId successful");
// Get new Instance ID token
String token = task.getResult().getToken();
Context ctx = ApplicationCustom.getContext();
SharedPreferences preferences = ctx.getSharedPreferences(Config.SHARED_PREFERENCES, Context.MODE_PRIVATE);
preferences.edit().putString(Config.SHARED_PREFS_DEVICE_TOKEN, token).apply();
pushToServer();
});
}
public void pushToServer(){
// Logic to push token to a server reading from preferences
}
}
观察:
1) 永远不会为正在更新的应用程序调用 onNewToken。
2) 新安装获得 token
3) 在我添加对 FirebaseInstanceId.getInstance().deleteInstanceId()
的调用之后OnComplete 也不会被调用。
4) 在真实手机(而非模拟器)上调用 getToken(senderId, "FCM")
总是会导致
java.io.IOException: TOO_MANY_REGISTRATIONS
at com.google.firebase.iid.zzr.zza(Unknown Source:66)
at com.google.firebase.iid.zzr.zza(Unknown Source:79)
at com.google.firebase.iid.zzu.then(Unknown Source:4)
at com.google.android.gms.tasks.zzd.run(Unknown Source:5)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
我该如何解决观察 1。是否因为 token 已经交付给 UrbanAirship 而没有调用 onNewToken?Fyi getToken 在服务 onCreate() 方法中被调用。
implementation 'com.google.firebase:firebase-messaging:17.3.4'
最佳答案
您可以通过以下方式获得 fcm token :-
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (task.isSuccessful()) {
String firebaseToken = task.getResult().getToken();
} else {
getFirebaseToken();
}
}
});
关于android - FCM代币发行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56235190/
我只是一个新手,刚刚开始学习使用教程等制作 Android 应用程序...我刚找到一些代码来制作 Google 风格的卡片,我写了代码,但由于某种原因它似乎有错误。 在我的静态中,它不能“从对象转换为
就像我在之前的问题中告诉过你的那样,我正在学习有关代表的知识,或者更准确地说,我正在尝试回答我对那些坏男孩的所有问题。 MSDN 文档在某种程度上对我帮助不大。他们无法真正回答我以下问题: 我有这个代
有人可以帮助我了解 rgdal 的问题是什么吗? 我为centos 6 64位安装了gdal 2,但我没有成功安装rgdal。 我试图找出问题所在,但我没有在互联网上找到任何有用的东西。 这是 Rst
为了使SwingTimer准确,我喜欢@Tony Docherty建议的逻辑和示例 在CR。这是Link。 为了突出显示给定的单词,一次又一次地总是有几微秒的延迟。如果我要突出显示一些单词:“hell
GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) 尽管我的播放服务已经更新,但总是返回 2 作为响应。 IDE:安卓工作室0.8.9
我目前正在尝试构建一个 Electron 应用程序。我试图将自定义字体引入到我的应用程序中,并且在开发中,该自定义字体有效,但是,当将其编译为可用于生产环境的应用程序时,该字体不会通过。 我在此处放置
我是一个非常入门的人,这个问号是针对井字游戏的一个问题。当我完成第一个游戏时,该功能起作用。它问我是否要再玩一次。但是在第二局结束后,程序结束,告诉我“玩家x赢了”,而没有问是或否的问题。您能帮我解决
我一直在构建一个可在全局范围内使用的货币清除功能。然而,一个错误已经被发现,但不确定原因。 +(double)removeFormatPrice:(NSString *)strPrice {
我曾尝试在 AWS 上运行 Beego,但无论我尝试过什么,我似乎都无法连接到运行 Beego 的端口 8080。我不确定这是 AWS 还是 Beego 的问题,但我似乎也无法连接到端口 80(我尝试
当我尝试从ElasticBeanstalk在Docker Hub中部署代码时,出现以下错误。 问题出在S3存储桶端点上。在下面的Json模板中为S3存储桶指定端点的正确方法是什么。 错误: NoSuc
我是一名优秀的程序员,十分优秀!