使用新的FirebaseMessaging,可以通过以下方式轻松取消/订阅主题:
FirebaseMessaging.getInstance().subscribeToTopic();
FirebaseMessaging.getInstance().unsubscribeFromTopic();
但有没有办法获得当前安装所订阅的所有主题?
答案 0 :(得分:54)
我搜索了Android API,在SO上提出相同的问题,但却找不到任何东西。 Android API中没有任何内容可以获取特定令牌的所有主题。
https://iid.googleapis.com/iid/info/<TOKEN>?details=true
Content-Type:application/json
Authorization:key=AAA....i1nM:APA9.....81gTPXCE55....JLPEG0wZobG_ile8lI35JTzHYE5MC..BmDD_Cxj5OxB1Yh....Rs5lo3UwLNL9h-WcocGV....b5bYWNI55kzNsrHK-7GljUDtMn
url中的 TOKEN :FirebaseInstanceId.getInstance().getToken();
密钥:可在firebase console中找到:您的项目 - &gt;设置 - &gt;项目设置 - &gt;云消息传递 - &gt;服务器密钥
注意:找到密钥时要小心,不要使用不同的web api密钥。
答案 1 :(得分:2)
对于那些想使用命令行CURL进行测试的人,请遵循以下语法:
.bg{
background: url("small project/rasht_2.jpg") no-repeat ;
width: 100%;
height: 100vh;
background-size: cover;
}
.blur{
width: 100%;
height: 100vh;
backdrop-filter: blur(5px);
margin: 0;
padding: 0;
}
.form-container{
padding: 50px 60px;
margin-top: 20vh;
-webkit-box-shadow: 0px 4px 13px 3px rgba(0,0,0,0.75);
-moz-box-shadow: 0px 4px 13px 3px rgba(0,0,0,0.75);
box-shadow: 0px 4px 13px 3px rgba(0,0,0,0.75);
}
响应:
#curl --location --request GET 'https://iid.googleapis.com/iid/info/yourFCMDeviceToken?details=true' \
--header 'Authorization: Bearer YourProject_CloudMessaging_ServerKey'
答案 2 :(得分:0)
此主题仍然相关,iOS SDK中仍没有与此相关的API。
如果您的目标是防止用户多次订阅同一个主题,从而避免多次收到某组中的单个评论的通知,那么我的解决方案是使用UserDefaults进行简单的本地缓存。
非常简单:
func subscribeTo(topic: String){
// first check that the user isn't already
// subscribed, or they get multiple notifications
let localFlag = UserDefaults.standard.bool(forKey: topic)
if localFlag == true {
print("user already subscribed to topic: \(topic)")
return
}
print("attempting to subscribe user to topic: \(topic)")
// Subscribe to comet chat push notifications through Firebase
Messaging.messaging().subscribe(toTopic: topic) { error in
if error == nil {
print("subscribed CometChat user to topic: \(topic)")
// set local flag as "already subbed"
UserDefaults.standard.setValue(true, forKey: topic)
return
}
print("attempt to subscribe CometChat user to topic \(topic) failed: \(error?.localizedDescription ?? "(no error provided)")")
}
}
我的应用程序流程将用户登录,然后自动获取与该用户关联的主题列表,并在每次启动时自动订阅该主题。
这样做的原因是高度确保用户会收到通知。
流程: 用户启动app->检索到的主题->迭代并传递主题以订阅func->如果topic == true,则阻止主题;>如果topic!= true,则通过主题
然后我们当然会在退订时在主题密钥处将nil
分配给本地bool。
取消订阅总是成功的,而无需进行此类阻止/检查,因为当用户不希望收到通知时,UX最好保守一些。
干杯。
答案 3 :(得分:-1)