首先我为我糟糕的英语道歉。我正在接近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();
(如果他想更改服务器,我只需清理我的 App 数据并使用新密钥重新初始化 Parse)
- 一切正常,直到我尝试在应用程序关闭(非活动且不在后台)时发送推送通知时,
NullPointerException
由于尚未调用 Parse 的初始化。
想法 2 - 模拟多服务器
- 我手动创建一台
Parse.com
服务器 - 所有表都有一个新的列(例如)
uniqueIdServer
我在应用程序中初始化解析,如:
public class MyApplication extends Application { @Override public void onCreate() { Parse.initialize(this, "ThisTimeIHaveJustOneAppIDIt'sEasy", "SameHere"); ParseInstallation.getCurrentInstallation().saveInBackground(); super.onCreate(); }}
我显示了我的旧列表,但这次只是 [name, uniqueID]
- 用户选择他的“服务器”
- 现在我可以用我的新列轻松过滤我的数据,当我的应用程序关闭时我没有问题,因为 Parse 会自己调用他的初始化程序
- 但我不知道如何过滤推送通知
uniqueId
我尝试使用频道而不是仅在该频道发送推送:
List<String> channels = new ArrayList<>(); channels.add(getUniqueID()); ParseInstallation install = ParseInstallation.getCurrentInstallation(); install.put("channels", channels); install.saveEventually();
但总是一样的,我不知道在“应用程序时间”我的用户会选择什么,所以我
getUniqueID()
会绑定"null"
或类似的,更糟糕的是我不知道如何更改频道(atm 我只能在我卸载我的应用程序时)
真的非常感谢,任何帮助将不胜感激。