从firebase云消息传递获取所有订阅的主题

时间:2016-06-23 09:39:08

标签: android firebase-cloud-messaging

使用新的FirebaseMessaging,可以通过以下方式轻松取消/订阅主题:

FirebaseMessaging.getInstance().subscribeToTopic();
FirebaseMessaging.getInstance().unsubscribeFromTopic();

但有没有办法获得当前安装所订阅的所有主题?

4 个答案:

答案 0 :(得分:54)

我搜索了Android API,在SO上提出相同的问题,但却找不到任何东西。 Android API中没有任何内容可以获取特定令牌的所有主题。

但是,您可以通过GET请求

来完成

HTTP GET请求

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)

千万不要以编程方式尝试。

但是您可以通过以下方式执行此操作:转到Firebase控制台->您的项目->云消息传递->新通知->目标->单击用户群旁边的主题选项卡,只需单击消息主题文本框,您将获得已订阅列表主题

enter image description here