首先,我为我糟糕的英语道歉。我刚刚接近Parse.com
,我正在开发一个"多服务器"应用程序,它允许我发送经过"服务器"过滤的通知。
我尝试了两种解决方案,但都有一些问题,都与以下事实有关:当我启动应用程序时,我不知道用户会选择哪个"服务器"。
创意1-真正的多服务器
- 我手动创建n个
Parse.com
服务器,彼此完全分离 - 我将所有服务器密钥存储在像
[Name, AppID, clientKey]
这样的对象中 - 我的应用程序列出名称属性
- 用户选择他的服务器
-
我启动新的
Activity
,其中onCreate()
我初始化Parse,如:String appID = getAppID(); String cKey = getKey(); Parse.initialize(this, appID, cKey); ParseInstallation.getCurrentInstallation().saveInBackground();
-
(如果他想更改服务器,我只需清理我的应用程序数据,并用新密钥重新初始化Parse)
- 一切都很好,直到我尝试在应用程序关闭时发送推送通知(非活动且不在后台),因为Parse的初始化尚未调用,所以我有一个
NullPointerException
创意2-模拟多服务器
- 我手动创建一个
Parse.com
服务器 - 所有表都有一个新的Column,类似于(举个例子)
uniqueIdServer
-
我在应用程序中初始化解析,如:
public class MyApplication extends Application { @Override public void onCreate() { Parse.initialize(this, "ThisTimeIHaveJustOneAppIDIt'sEasy", "SameHere"); ParseInstallation.getCurrentInstallation().saveInBackground(); super.onCreate(); }}
-
我显示我的旧列表,但这次只是[名称,uniqueID]
- 用户选择他的"服务器"
- 现在我可以用我的新列轻松地过滤我的数据,当我的应用程序关闭时我没有问题,因为Parse会自己调用他的初始值设定项
- 但我不知道如何仅为一些
uniqueId
过滤推送通知 -
我尝试使用信道,而不是只在该信道发送推送:
List<String> channels = new ArrayList<>(); channels.add(getUniqueID()); ParseInstallation install = ParseInstallation.getCurrentInstallation(); install.put("channels", channels); install.saveEventually();
-
但总是一样的,我不知道在"应用程序时间"我的用户会选择什么,所以我的
getUniqueID()
会绑定"null"
或类似的,更糟糕的是,我不清楚如何更改频道(只有卸载我的应用程序,我才能更改atm)
真的非常感谢,任何帮助都将不胜感激。
使用想法2,可以为安装提供自定义属性,并像查询任何其他对象一样进行查询。此外,可以通过安装查询进行推送。请参阅文档中的"高级定位"。
至少,你可以这样说:
var query = new Parse.Query(Parse.Installation);
query.equalTo('uniqueIdServer', 'serverId123');
var data = { alert: "Ciao users of serverId123!" }
Parse.Push.send({ where: query, data: data }).then(function() {
// this code runs after the push has been sent to APN
}, function(error) {
// this code runs in case of an error
});