如何在 iOS 和 iOS 扩展之间共享 Xamarin.Forms 项目中的首选项?

How to share Preferences in a Xamarin.Forms project between an iOS and iOS extensions?

我正在尝试在 PushNotification.Extension 项目中使用 Preferences.Get (Xamarin.Essentials) 获取字符串 (UserID),但由于 Preferences.Set 发生在 Xamarin 中iOS 项目,我总是在扩展项目中得到一个空字符串。

有没有办法在 iOS 项目和 iOS.extension 之间共享此首选项?

public string UserID
{
    get
    {
        return Preferences.Get(nameof(UserID), UserIDDefault);
    }
    set
    {
        Preferences.Set(nameof(UserID), value);
    }
}

根据Apple docs,请按照步骤启用data-sharinig。

  1. 启用 App Groups 功能,refer to App Group Capabilities in Xamarin.iOS

  2. Add the app to the App Group .

  3. 使用 NSUserDefaults 并使用扩展包标识符的名称对其进行初始化。

//Save 
var defaults = new NSUserDefaults(@"com.example.domain.MyShareExtension");
defaults.SetString("value","Mykey");
defaults.Synchronize();
//Get
var defaults = new NSUserDefaults(@"com.example.domain.MyShareExtension");
var value = defaults.ValueForKey("Mykey");