当用户第一次在Flutter中安装应用程序时,无法获取Onesignal用户ID



当用户第一次安装我的应用程序时,我想将onesignal用户Id存储在数据库中。我写了以下代码,但不允许我这么做。

然而,当用户从应用程序注销并重新登录时,我可以检索到一个信号用户ID,并可以保存在数据库中。

Future<void> initPlatformState(username) async {

if (!mounted) return;

OneSignal.shared.setLogLevel(OSLogLevel.verbose, OSLogLevel.none);

OneSignal.shared.setRequiresUserPrivacyConsent(_requireConsent);

var settings = {
OSiOSSettings.autoPrompt: false,
OSiOSSettings.promptBeforeOpeningPushUrl: true
};



OneSignal.shared
.setSubscriptionObserver((OSSubscriptionStateChanges changes) {

print("SUBSCRIPTION STATE CHANGED: ${changes.jsonRepresentation()}");

});

OneSignal.shared.setPermissionObserver((OSPermissionStateChanges changes) {

print("PERMISSION STATE CHANGED: ${changes.jsonRepresentation()}");
});

OneSignal.shared.setEmailSubscriptionObserver(
(OSEmailSubscriptionStateChanges changes) {
print("EMAIL SUBSCRIPTION STATE CHANGED ${changes.jsonRepresentation()}");
});

await OneSignal.shared
.init("MY Onesignal APP ID", iOSSettings: settings);

OneSignal.shared
.setInFocusDisplayType(OSNotificationDisplayType.notification);
var status = await OneSignal.shared.getPermissionSubscriptionState();
onesignalUserId = status.subscriptionStatus.userId;   

print("player ID: "+ onesignalUserId.toString()); // printing only in re-login
_saveOneSignalId(onesignalUserId,username); // my save funtion into the DB

}
初始化One Signal以获取playerId/userId时,可以在main.dart文件中调用以下函数。当用户第一次打开应用程序或userId(playerId(更改时,会调用以下函数。
OneSignal.shared.setSubscriptionObserver((OSSubscriptionStateChanges changes) async {
String onesignalUserId = changes.to.userId;
print('Player ID: ' + onesignalUserId);
}

playerId/userId可用于向特定用户发送测试通知。

请尝试一下。

OneSignal.shared.setSubscriptionObserver((OSSubscriptionStateChanges changes) 
async{
var status = await OneSignal.shared.getPermissionSubscriptionState();
if (status.subscriptionStatus.subscribed){
String onesignalUserId = status.subscriptionStatus.userId;
print('Player ID: ' + onesignalUserId);
}

最新更新