- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在我的应用中使用 Firebase 通知。当我第一次安装我的应用程序时,FIRInstanceID.instanceID().token()
返回 nil,但下次不会返回 nil。除了这个,一切都做得很完美。
代码如下:
import UIKit
import Firebase
import FirebaseMessaging
import FirebaseInstanceID
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, FIRMessagingDelegate
{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
//Configuring Firebase
FIRApp.configure()
if #available(iOS 10.0, *)
{
print("Test")
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert]) { (granted, error) in
if granted
{
//self.registerCategory()
}
}
// For iOS 10 data message (sent via FCM)
FIRMessaging.messaging().remoteMessageDelegate = self
}
else
{
let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
NotificationCenter.default.addObserver(self, selector: #selector(self.tokenRefreshNotification), name: NSNotification.Name.firInstanceIDTokenRefresh, object: nil)
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.sandbox)
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.prod)
}
func tokenRefreshNotification(notification: NSNotification)
{
if let refreshedToken = FIRInstanceID.instanceID().token()
{
print("InstanceID token: \(refreshedToken)")
}
// Connect to FCM since connection may have failed when attempted before having a token.
connectToFcm()
}
func connectToFcm()
{
FIRMessaging.messaging().connect { (error) in
if (error != nil)
{
print("Unable to connect with FCM. \(error)")
}
else
{
print("Connected to FCM.")
}
}
}
}
在远程页面中我正在调用 Firebase InstanceID token
let token = FIRInstanceID.instanceID().token()
但第一次它返回零值。
最佳答案
更改FIRApp.configure()
的顺序并尝试一次,有关更多信息,您可以获取示例here
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Register for remote notifications. This shows a permission dialog on first run, to
// show the dialog at a more appropriate time move this registration accordingly.
// [START register_for_notifications]
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
// For iOS 10 data message (sent via FCM)
FIRMessaging.messaging().remoteMessageDelegate = self
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
// [END register_for_notifications]
FIRApp.configure()
// [START add_token_refresh_observer]
// Add observer for InstanceID token refresh callback.
NotificationCenter.default.addObserver(self,
selector: #selector(self.tokenRefreshNotification),
name: .firInstanceIDTokenRefresh,
object: nil)
// [END add_token_refresh_observer]
return true
}
在该委托(delegate)上检查 token 是否到达
func tokenRefreshNotification(notification: NSNotification) {
// print("refresh token call")
guard let contents = FIRInstanceID.instanceID().token()
else {
return
}
// let refreshedToken = FIRInstanceID.instanceID().token()!
print("InstanceID token: \(contents)")
// UserDefaults.standardUserDefaults().set(contents, forKey: "deviceToken");
// Connect to FCM since connection may have failed when attempted before having a token.
connectToFcm()
}
最后像连接FCM一样
func connectToFcm() {
// Won't connect since there is no token
guard FIRInstanceID.instanceID().token() != nil else {
return
}
// Disconnect previous FCM connection if it exists.
FIRMessaging.messaging().disconnect()
FIRMessaging.messaging().connect { (error) in
if error != nil {
print("Unable to connect with FCM. \(error?.localizedDescription ?? "")")
} else {
print("Connected to FCM.")
}
}
}
关于iOS Swift Firebase InstanceID token 第一次返回 Nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43534486/
这是执行InstanceID instanceID时显示的错误。 'android.app.AppOpsManager', referenced from method com.google.andr
我正在使用 swift 和 firebase。以前我使用以下方法获取 firebase token ,然后我用它存储到数据库中以发送通知。 InstanceID.instanceID().token(
我在 apk 构建中遇到一些错误。这是我的代码。 package com.my.mybooks.services; import android.util.Log; import com.google
我在一个应用中实现了谷歌云消息传递。首先,我使用 InstanceID 获取 token ,下一步是在我的服务器中注册设备,然后我获取一个 HttpResponse。根据此响应,我想删除 token
您好,我正在尝试在我的应用程序中包含 firebase 并遵循文档,当我尝试进行 google 登录时,出现无法配置 Firebase InstanceID 错误。请告知如何克服此错误 最佳答案 有两
我正在试用 Play Services GCM 7.5。但是,拥有 InstanceID 类看起来不错。但是,每次我将应用程序从“最近的任务”中滑出或强行停止应用程序时,实例 ID 字符串都会发生变化
假设我有一个 PlayerData ScriptableObject,它包含对 AvatarData ScriptableObject 的引用,如下所示: public class PlayerDat
我正在尝试使用 Get-Job 和 Wait-Job 等作业 cmdlet 来管理计划作业的实例。我遇到了问题,感觉缺少一些基本的东西。 我发现,如果我想使用 Job cmdlet 处理计划的作业实例
我在iOS应用程序中实现了Firebase Cloud Messaging。除了一件事,一切似乎都可以正常工作,事实是从应用程序启动到将要在Firebase中刷新设备 token 大约需要10秒钟。
我尝试使用可移植.net 程序集 中的辅助类从持久WCF 服务 获取instanceId。要检索 ID,我需要调用: IClientChannel.GetProperty()... 但是 IConte
我不明白: FirebaseAuth.getInstance().currentUser.getIdToken(true).addOnSuccessListener { Log.d("tag"
我最近更新了我的 SWIFT 应用程序 pod 文件,并且由于该 firebase 版本现在更新到 5.2。现在在获取设备实例 ID 时出现以下错误。 let tokenId = InstanceID
我对 Java 编程和一般编程还很陌生。现在我决定制作我自己的应用程序,该应用程序应该使用谷歌云消息传递。不知何故我成功了,但后来我意识到我使用了方法 String regid = gcm.regis
根据docs InstanceId: provides a unique identifier for each app instance 并且实例 ID 稳定但可能会失效,如果: App delet
我第一次尝试在我的应用程序中实现 GCM,所以我按照这些步骤进行操作,但出现了一个错误,导致我的应用程序无法获得用于在我的 sv 中注册的 token 。 它说: 09-30 23:05:52.196
在 .NET 4.0 下的 Windows Workflow Foundation 中,有没有一种方法可以根据长时间运行的持久化工作流的 InstanceId (GUID) 来关联操作? 例如: 操作
在我的Xamarin.iOS项目中,我更新了Firebase nuget程序包,完成更新后,我开始在此代码上出错 //You'll need this method if you set "Fireb
在 jQuery 插件代码中,我看到以下内容: $window.on('resize.' + instance.guid, function () { instance.registerTim
由于 GCM 不断更新,我搜索过的大部分资源似乎都已过时或不清楚。基本上,我对 token 和 ID 何时到期感到困惑。 (作为引用,我正在使用 Android。) 据我了解(如果我错了,请纠正我),
我想在 Android 上实现 GCM 客户端。 按照这里的指南 https://developers.google.com/cloud-messaging/android/client 我已经下载了
我是一名优秀的程序员,十分优秀!