我想通过Google Cloud Messaging在Android和iOS上实现推送通知.
我不想notification在我的有效负载中使用密钥,因为Android行为并不理想.在Android上,我更喜欢我的接收器总是被data有效载荷触发,我可以用Notification自己构建自己NotificationCompat.例如,如果您notification在Android上使用有效负载,则无法控制通知样式.
但是,如果我只发送一个data有效载荷,我想我的iOS应用程序将不会接收推送,如果它是背景 - 杀死,从设备重启后从未启动等等.我认为content_availableGCM 的那个标志可能会触发推送?
在iOS上,我是否能够复制Android行为,始终在通知后执行我的应用内代码?我可以根据GCM data有效负载构建我自己的iOS通知,并且可能使用类似的东西UILocalNotification,但从我正在阅读的内容来看,iOS要求notification有效负载存在以确保用户始终接收推送.
我能在iOS上获得这种控制吗?
我在设备组文档中发现的第一件事是,如果删除设备组中唯一的注册ID,则notification_key该设备组将被删除.
因此,在管理我的设备组注册时,我必须跟踪我在使用GCM的应用中注册的注册ID.这样,我知道是否"创建"一个组或"添加"到一个组,具体取决于该组是否至少有一个注册ID.您会认为Google不会强加这种行为(为什么他们的API无法确定是否执行add或create操作),但它就是这样.
我的问题是,什么时候可以notification_key删除?我看到的一个场景是1个设备上的用户在使用大约6个月后获得第二个GCM注册ID.假设他们的GCM注册ID是123abc他们第一次使用该应用程序时,现在他们的GCM注册ID是456xyz.如果用户要注销,我将从456xyz设备组中删除.但是,我是否需要123abc从设备组中删除?如果我不这样做,设备组/将notification_key保持活动状态吗?
另一种情况是,如果用户卸载应用程序,然后几天后再回来.卸载应用程序后,添加到设备组的GCM注册ID将无效 - 我相信它们在实际应用程序安装中是唯一的.那么notification_key在用户重新安装应用程序并尝试重新加入假定的现有设备组/"notification_key"之前是否有可能删除它?
这就是我在匿名身份验证支持的 Android 应用程序中处理身份验证的方法。
public class StartupActivity extends AppCompatActivity {
FirebaseAuth.AuthStateListener mAuthListener;
@Override
protected void onStart() {
super.onStart();
FirebaseAuth.getInstance().addAuthStateListener(mAuthListener = firebaseAuth -> {
if (firebaseAuth.getCurrentUser() != null) {
LoggedInActivity.newInstance(this);
} else {
IntroActivity.newInstance(this);
}
});
}
@Override
protected void onStop() {
FirebaseAuth.getInstance().removeAuthStateListener(mAuthListener);
super.onStop();
}
}
Run Code Online (Sandbox Code Playgroud)
这StartupActivity是我在我的应用程序的主要启动器活动中定义的活动AndroidManifest.xml。
该模式运行良好:在 的末尾IntroActivity,我的代码对用户进行匿名身份验证并将其发送到LoggedInActivity. 此后每次启动,匿名身份验证都会持续进行,并且用户会直接转到LoggedInActivity。
然而,一些用户报告丢失了他们的匿名身份验证并实际上丢失了他们的数据,因为我的其他内部应用程序屏幕是从与用户 UID 相对应的 Firebase 节点驱动的。
这非常糟糕,但似乎只发生在少数用户身上。并且仅适用于匿名身份验证 - 如果发生在电子邮件身份验证中,那甚至不是什么大问题,因为用户可以重新登录。但对于匿名身份验证,这是一个相当大的问题。用户将失去一切。
该问题可能与 Firebase SDK 更新或应用程序更新有关 - 这似乎是我的用户最常发生/报告最多的情况。
为什么会发生这种情况?这对于身份验证来说是一个不好的模式吗?我喜欢使用匿名身份验证的概念,让用户无需登录即可使用您的应用程序,我相信这也是 Firebase 的意图。这几乎就像我需要给他们提供通过实际登录来支持他们的帐户的选项,因为这个错误有如此糟糕的影响。
我有一个带有SQLite的Android应用程序,在创建表时使用以下行:
_id integer primary key autoincrement
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我的用户想要,我可以对此行进行更新并更改_id吗?所以,例如,我将在DB中有两条记录:
1 My First Record
2 My Second Record
Run Code Online (Sandbox Code Playgroud)
在我更新之后,我想要像:
1 My First Record
38 My Second Record
Run Code Online (Sandbox Code Playgroud)
SQLite会允许这个并且很容易适应吗?即自动处理的下一个主键是#39?