由于GCM不断更新,我搜索过的大部分资源似乎已经过时或不清楚.基本上,我对令牌和ID过期时感到困惑.(供参考,我正在使用Android.)
根据我的理解(如果我错了请纠正我),我的服务器有一个API密钥和一个发件人ID.使用发件人ID我可以通过本地存储在客户端上的InstanceID让我的客户端请求令牌.我在这里已经有点困惑了.我的应用程序上线时会分配InstanceID吗?它有变化吗?应用程序升级或卸载并重新安装(或设备恢复)时怎么办?通过调用InstanceID.getInstance,我总是会检索相同的InstanceID,还是最终会过期并给我一个新的?通过调用getID()来存储您检索的字符串是否有任何价值?文档似乎表明你在调用getID()时实际上检索了一个新的InstanceID,这样就会使事情复杂化.(供参考,我指的是:https://developers.google.com/instance-id/)
使用InstanceID,我的客户端可以从GCM服务器请求令牌,然后将其发送到我的应用服务器.我的应用服务器存储此令牌,并可以使用它将消息发送到GCM服务器,然后GCM服务器将消息发送到设备.我相信,设备使用存储的InstanceID来实际接收这些消息.因此,拥有一个扩展GcmListenerService的类将允许我使用onMessageReceived接收这些消息?我不需要做任何特别的事情(除了在AndroidManifest中定义它)?我不必实际告诉它使用InstanceID?它只是神奇地知道吗?
这些ID和令牌什么时候到期?它们会过期吗?我将令牌作为字符串存储在服务器上,但如果其中任何一个到期,我怎么知道它们已经过期了?我总是可以生成一个新的InstanceID和Token,这看起来很简单,但旧的那些仍然保持活跃状态?如何从服务器擦除旧令牌?似乎有一种简单的方法可以在iOS方面使用APNS来执行此操作,您可以在其中检索所有过期令牌的列表,并从数据库中擦除它们.
我在我的应用中使用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
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用一个具有组的应用程序,该组中有多个用户,每个用户可能有多个设备。我正在使用FCM发送通知以更新用户有关组更新的信息。每个用户都user_<user_id>从他/她的所有设备中订阅了主题。因此,要向组中的多个人发送消息,我正在将每个用户注册到名为like的主题group_<grp_id>,然后向组发送通知将其发送到其所有设备上的所有订户。
将用户从服务器端从组中删除时,如何确定用户的身份如何困难?如何确保该用户退订该主题。因此,我计划,由于用户的所有工作(活动)注册令牌都将订阅该主题,因此我可以检索这些令牌,并且比batchRemove 对InstanceId服务触发API调用可以确保将用户从立即从组中获取更新中移除无需等待设备上线并从组主题中注销。
但是似乎没有任何API可用来根据本文档检索给定主题的令牌列表。通过保存到服务器并在不需要时删除旧令牌来处理每个注册令牌,将给服务器增加不必要的负担。
有什么方法可以检索主题的标记列表,以便可以将其从组中删除?
我需要一个函数,它告诉我instanceID,我在这里搜索一个函数,但你总是需要id ...是的,这就是问题所在.
我不允许使用控制台,需要通过脚本找到它.
我看到了AWS.MetadataService 文档,但我无法处理它.我只能看到单件,但我不知道如何正确匹配它们,以及我想要的东西.目前我有这个
var meta = new AWS.MetadataService();
meta.request("http://169.254.169.254/latest/meta-data/", function(err, data){
console.log(data);
});
Run Code Online (Sandbox Code Playgroud)
但是这不起作用......路径参数需要什么?
我想以字符串形式获取设备的实例 ID 并将其分配给变量
我只知道设备名称,所以当我这样做时:
Get-PnpDevice -FriendlyName 'TSP100'
Run Code Online (Sandbox Code Playgroud)
它显示:
Status Class FriendlyName InstanceId
------ ----- ------------ ------------
OK PrintQueue TSP100 SWD\PRIN...
Run Code Online (Sandbox Code Playgroud)
所以理想情况下它看起来像这样:
$env:tsp100id = (Get-PnpDevice -FriendlyName 'TSP100' *some stuff*)
Run Code Online (Sandbox Code Playgroud) instanceid ×5
android ×2
amazon-ec2 ×1
device ×1
firebase ×1
ios ×1
node.js ×1
powershell ×1
scripting ×1
swift3 ×1
token ×1