【问题标题】:Unable to get the Onesignal userid when the user install the app first time in Flutter用户首次在 Flutter 中安装应用时无法获取 Onesignal 用户 ID
【发布时间】:2020-08-06 11:01:50
【问题描述】:

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

但是,当用户从应用程序注销并重新登录时,我能够检索 onesignal 用户 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
                    
                                         }

【问题讨论】:

  • 找到解决办法了吗?

标签: flutter onesignal


【解决方案1】:

请试试这个。

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);
}

【讨论】:

    【解决方案2】:

    在初始化 One Signal 时,您可以在 main.dart 文件中调用以下函数来获取 playerId/userId。当用户第一次打开应用程序或用户ID(playerId)发生变化时,会调用以下函数。

    OneSignal.shared.setSubscriptionObserver((OSSubscriptionStateChanges changes) async {
         String onesignalUserId = changes.to.userId;
         print('Player ID: ' + onesignalUserId);
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 2021-02-10
      • 1970-01-01
      • 2010-11-21
      相关资源
      最近更新 更多