{"id":203,"date":"2026-05-28T12:35:23","date_gmt":"2026-05-28T12:35:23","guid":{"rendered":"https:\/\/langsoftware.de\/?page_id=203"},"modified":"2026-05-28T12:36:38","modified_gmt":"2026-05-28T12:36:38","slug":"myring-privacy-policy","status":"publish","type":"page","link":"https:\/\/langsoftware.de\/?page_id=203","title":{"rendered":"MyRing &#8211; Privacy Policy"},"content":{"rendered":"\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <title>MyRing \u2014 Privacy Policy<\/title>\n  <meta name=\"description\" content=\"Privacy policy for the MyRing iOS app \u2014 contraceptive ring tracking and reminders.\">\n  <style>\n    :root {\n      --brand:        #F8B4AF;\n      --brand-dark:   #C77A6F;\n      --text:         #1d1916;\n      --text-muted:   #6c5f5a;\n      --bg:           #fffaf7;\n      --card:         #ffffff;\n      --rule:         #f0d8d2;\n      --max-width:    760px;\n    }\n    * { box-sizing: border-box; }\n    html { -webkit-text-size-adjust: 100%; }\n    body {\n      margin: 0;\n      font-family: -apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"Helvetica Neue\", Arial, sans-serif;\n      font-size: 17px;\n      line-height: 1.6;\n      color: var(--text);\n      background: linear-gradient(180deg, var(--bg) 0%, #fbe9e2 100%);\n      min-height: 100vh;\n    }\n    main {\n      max-width: var(--max-width);\n      margin: 0 auto;\n      padding: 48px 24px 80px;\n    }\n    header {\n      border-bottom: 1px solid var(--rule);\n      margin-bottom: 32px;\n      padding-bottom: 24px;\n    }\n    .brand {\n      display: inline-block;\n      font-weight: 700;\n      font-size: 1.1rem;\n      color: var(--brand-dark);\n      letter-spacing: 0.02em;\n      text-transform: uppercase;\n    }\n    h1 {\n      font-size: clamp(1.8rem, 4vw, 2.4rem);\n      margin: 0.4em 0 0.2em;\n      line-height: 1.2;\n      letter-spacing: -0.01em;\n    }\n    .updated {\n      color: var(--text-muted);\n      font-size: 0.95rem;\n      margin: 0;\n    }\n    h2 {\n      font-size: 1.25rem;\n      margin: 2.2em 0 0.6em;\n      padding-top: 0.5em;\n      border-top: 1px solid var(--rule);\n      letter-spacing: -0.005em;\n    }\n    p { margin: 0 0 1em; }\n    ul {\n      padding-left: 1.4em;\n      margin: 0 0 1em;\n    }\n    li { margin: 0.25em 0; }\n    a {\n      color: var(--brand-dark);\n      text-decoration: underline;\n      text-decoration-thickness: 1px;\n      text-underline-offset: 2px;\n    }\n    a:hover { color: var(--text); }\n    strong { font-weight: 600; }\n    em { color: var(--text-muted); font-style: italic; }\n    .callout {\n      background: var(--card);\n      border: 1px solid var(--rule);\n      border-radius: 14px;\n      padding: 18px 22px;\n      margin: 1.4em 0;\n    }\n    .callout p:last-child { margin-bottom: 0; }\n    table {\n      width: 100%;\n      border-collapse: collapse;\n      margin: 1.2em 0 1.6em;\n      font-size: 0.95rem;\n    }\n    th, td {\n      text-align: left;\n      vertical-align: top;\n      padding: 10px 12px;\n      border-bottom: 1px solid var(--rule);\n    }\n    th {\n      background: var(--card);\n      font-weight: 600;\n    }\n    tr:last-child td { border-bottom: none; }\n    .table-wrap {\n      overflow-x: auto;\n      border-radius: 12px;\n      border: 1px solid var(--rule);\n      background: var(--card);\n      margin: 1.2em 0 1.6em;\n    }\n    .table-wrap table { margin: 0; }\n    footer {\n      margin-top: 56px;\n      padding-top: 24px;\n      border-top: 1px solid var(--rule);\n      color: var(--text-muted);\n      font-size: 0.92rem;\n      text-align: center;\n    }\n    @media (prefers-color-scheme: dark) {\n      :root {\n        --text: #f6efeb;\n        --text-muted: #b8a6a0;\n        --bg: #1a0e10;\n        --card: #2a181c;\n        --rule: #4a2e34;\n      }\n      body { background: linear-gradient(180deg, var(--bg) 0%, #2a181c 100%); }\n    }\n  <\/style>\n<\/head>\n<body>\n  <main>\n    <header>\n      <span class=\"brand\">MyRing<\/span>\n      <h1>Privacy Policy<\/h1>\n      <p class=\"updated\">Last updated: 28 May 2026<\/p>\n    <\/header>\n\n    <div class=\"callout\">\n      <p>This policy explains what data <strong>MyRing<\/strong> processes, why, and how you can exercise your rights under the GDPR and other applicable privacy laws. By using MyRing you confirm that you have read and accepted this policy.<\/p>\n    <\/div>\n\n    <h2>1. Controller<\/h2>\n    <p>The data controller responsible for the processing of personal data in MyRing is:<\/p>\n    <p>\n      <strong>Sebastian Lang<\/strong> (trading as langsoftware.de)<br>\n      <a href=\"mailto:contact@langsoftware.de\">contact@langsoftware.de<\/a><br>\n      <a href=\"https:\/\/langsoftware.de\">langsoftware.de<\/a>\n    <\/p>\n\n    <h2>2. Overview of what MyRing does with data<\/h2>\n    <div class=\"table-wrap\">\n      <table>\n        <thead>\n          <tr><th>Category<\/th><th>Where<\/th><th>Why<\/th><\/tr>\n        <\/thead>\n        <tbody>\n          <tr><td>Cycle data (insertion \/ removal dates, pause weeks, cycle history)<\/td><td>Local device + optional Cloud Backup<\/td><td>Power the app&#8217;s reminders, calendar and protection-status display<\/td><\/tr>\n          <tr><td>Diary entries (mood, period, notes, appointments)<\/td><td>Local device + optional Cloud Backup<\/td><td>Your private diary, never shared<\/td><\/tr>\n          <tr><td>Account email<\/td><td>Firebase Authentication (when you opt into Cloud Backup)<\/td><td>Identify your backup<\/td><\/tr>\n          <tr><td>Crash reports<\/td><td>Firebase Crashlytics<\/td><td>Diagnose and fix crashes<\/td><\/tr>\n          <tr><td>Anonymous usage events<\/td><td>Firebase Analytics<\/td><td>Understand which features are used; no personal data attached<\/td><\/tr>\n          <tr><td>Subscription state<\/td><td>RevenueCat + Apple App Store<\/td><td>Manage your Premium membership<\/td><\/tr>\n          <tr><td>Ad-related identifier (free users only)<\/td><td>Google Mobile Ads (AdMob)<\/td><td>Show non-personalised or \u2014 if you consent \u2014 personalised ads<\/td><\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n    <p>Nothing is sold to third parties. Health-relevant data (cycle, diary) never leaves your device unless you explicitly enable Cloud Backup.<\/p>\n\n    <h2>3. Local data \u2014 stays on your iPhone<\/h2>\n    <p>By default, MyRing stores all your cycle data and diary entries on your iPhone only, using Apple Core Data and SwiftData backed by the iOS app container. Apple&#8217;s at-rest encryption protects the database when your device is locked.<\/p>\n    <p>When you uninstall MyRing, this local data is removed by iOS together with the app.<\/p>\n\n    <h2>4. Cloud Backup (optional, opt-in)<\/h2>\n    <p>If you enable Cloud Backup in <em>Settings \u2192 Backup<\/em>, MyRing encrypts your cycle data and diary entries and uploads them to your authenticated <strong>Google Firebase Firestore<\/strong> account. You sign in with one of:<\/p>\n    <ul>\n      <li>Apple ID (Sign in with Apple)<\/li>\n      <li>Google account<\/li>\n      <li>Facebook account<\/li>\n      <li>Email + password (Firebase Authentication)<\/li>\n    <\/ul>\n    <p>What is stored in Firestore:<\/p>\n    <ul>\n      <li>Your cycle history (insertion \/ removal dates, customisations)<\/li>\n      <li>Your diary entries (mood tags, period strength, notes, appointments)<\/li>\n      <li>Your settings (reminder times, custom messages, colour preferences)<\/li>\n    <\/ul>\n    <p>The legal basis for this processing is your consent (GDPR Art. 6 para. 1 lit. a) \u2014 you explicitly switch Cloud Backup on. You can revoke consent at any time by signing out and deleting the backup from Settings.<\/p>\n    <p>The data is hosted by Google Cloud (Firestore) in the EU region. Google acts as our processor under GDPR Art. 28; the data processing agreement with Google is provided through the Firebase Terms of Service.<\/p>\n\n    <h2>5. Authentication<\/h2>\n    <p>Sign-in is handled by <strong>Firebase Authentication<\/strong>. When you sign in:<\/p>\n    <ul>\n      <li>With Apple ID: Apple provides us with a stable, pseudonymous user identifier. We do not receive your real Apple ID email unless you choose to share it.<\/li>\n      <li>With Google: your Google account email and basic profile data (name, profile picture URL) are received.<\/li>\n      <li>With Facebook: your Facebook user ID and email are received.<\/li>\n      <li>With Email + password: the email you enter and a securely hashed password are stored by Firebase.<\/li>\n    <\/ul>\n    <p>The email address is used only to identify your backup. We do not send marketing emails.<\/p>\n\n    <h2>6. Crash reports \u2014 Firebase Crashlytics<\/h2>\n    <p>If MyRing crashes, a crash report containing the device model, iOS version, app version, anonymous installation ID, and the stack trace is sent to <strong>Firebase Crashlytics<\/strong>. We do not transmit your cycle data, diary entries, email, or any other identifying information.<\/p>\n    <p>Legal basis: legitimate interest in stable, reliable software (GDPR Art. 6 para. 1 lit. f). You can disable crash reporting by uninstalling the app.<\/p>\n\n    <h2>7. Anonymous usage events \u2014 Firebase Analytics<\/h2>\n    <p>MyRing logs anonymous events (e.g. <code>premium_activated<\/code>, <code>diary_period_saved<\/code>) to <strong>Firebase Analytics<\/strong> to understand which features are used. These events do <strong>not<\/strong> contain cycle data, diary content, email or any directly identifying information.<\/p>\n    <p>Legal basis: legitimate interest in product improvement (GDPR Art. 6 para. 1 lit. f). For users in the EU, an ATT (App Tracking Transparency) prompt asks whether ad-related tracking is allowed \u2014 denying the prompt also prevents cross-app linking.<\/p>\n\n    <h2>8. Subscriptions \u2014 RevenueCat + Apple<\/h2>\n    <p>Your Premium subscription is managed by <strong>Apple App Store<\/strong>. We use <strong>RevenueCat<\/strong> as a thin layer in front of the App Store Server Notifications. RevenueCat sees: your Apple App Store receipt, the subscription product ID, the country of purchase, and a pseudonymous identifier. It does not see your cycle data or diary.<\/p>\n    <p>Legal basis: contract performance (GDPR Art. 6 para. 1 lit. b) for the subscription itself.<\/p>\n\n    <h2>9. Ads (free users only)<\/h2>\n    <p>Free users see banner ads served by <strong>Google Mobile Ads (AdMob)<\/strong> and occasionally interstitials.<\/p>\n    <ul>\n      <li>If you consent via the standard EU User Messaging Platform prompt shown on first launch, AdMob may use the IDFA \/ advertising identifier to serve <strong>personalised ads<\/strong>.<\/li>\n      <li>If you decline, AdMob serves <strong>non-personalised ads<\/strong> only.<\/li>\n    <\/ul>\n    <p>Premium users see no ads, and the AdMob SDK does not initialise an auction for them.<\/p>\n    <p>Legal basis: your consent (GDPR Art. 6 para. 1 lit. a) for personalised ads; legitimate interest (Art. 6 para. 1 lit. f) for non-personalised ads.<\/p>\n\n    <h2>10. International transfers<\/h2>\n    <p>Firebase (Authentication, Firestore, Crashlytics, Analytics, In-App Messaging) is operated by Google. Some sub-processing may occur in the United States. Where this happens, the transfer is covered by the EU Standard Contractual Clauses concluded as part of the Google Cloud DPA, plus Google&#8217;s additional safeguards (encryption in transit and at rest, restricted access).<\/p>\n\n    <h2>11. Retention<\/h2>\n    <div class=\"table-wrap\">\n      <table>\n        <thead>\n          <tr><th>Data<\/th><th>Retention<\/th><\/tr>\n        <\/thead>\n        <tbody>\n          <tr><td>Local cycle &amp; diary data<\/td><td>Until you uninstall the app or reset it via Settings \u2192 Reset<\/td><\/tr>\n          <tr><td>Cloud Backup (Firestore)<\/td><td>Until you sign out and delete the backup, or 365 days of inactivity, whichever comes first<\/td><\/tr>\n          <tr><td>Firebase Authentication account<\/td><td>Until you request deletion<\/td><\/tr>\n          <tr><td>Crash reports<\/td><td>90 days<\/td><\/tr>\n          <tr><td>Analytics events<\/td><td>14 months<\/td><\/tr>\n          <tr><td>Subscription state<\/td><td>For the lifetime of your subscription + statutory retention periods<\/td><\/tr>\n        <\/tbody>\n      <\/table>\n    <\/div>\n\n    <h2>12. Your rights<\/h2>\n    <p>Under GDPR you have the right to:<\/p>\n    <ul>\n      <li><strong>Access<\/strong> \u2014 request a copy of the personal data we hold about you<\/li>\n      <li><strong>Rectification<\/strong> \u2014 correct inaccurate data<\/li>\n      <li><strong>Erasure<\/strong> \u2014 request deletion of your data (&#8222;right to be forgotten&#8220;)<\/li>\n      <li><strong>Restriction<\/strong> \u2014 limit our processing<\/li>\n      <li><strong>Portability<\/strong> \u2014 receive your data in a machine-readable format<\/li>\n      <li><strong>Objection<\/strong> \u2014 object to processing based on legitimate interest<\/li>\n      <li><strong>Withdraw consent<\/strong> \u2014 at any time, with effect for the future<\/li>\n      <li><strong>Complain to a supervisory authority<\/strong> \u2014 in Germany, your state&#8217;s Datenschutzaufsichtsbeh\u00f6rde<\/li>\n    <\/ul>\n    <p>To exercise any of these rights, contact us at <a href=\"mailto:contact@langsoftware.de\">contact@langsoftware.de<\/a>. We respond within one month.<\/p>\n\n    <h2>13. Children<\/h2>\n    <p>MyRing is not intended for children under 13. We do not knowingly collect data from children. If you become aware that a child has used MyRing without parental consent, please contact us so we can delete the account.<\/p>\n\n    <h2>14. Changes to this policy<\/h2>\n    <p>We may update this policy from time to time. Material changes will be announced in the app and on <a href=\"https:\/\/langsoftware.de\">langsoftware.de<\/a>. The &#8222;Last updated&#8220; date at the top of this page indicates the current version.<\/p>\n\n    <h2>15. Contact<\/h2>\n    <p>\n      Sebastian Lang<br>\n      <a href=\"mailto:contact@langsoftware.de\">contact@langsoftware.de<\/a><br>\n      <a href=\"https:\/\/langsoftware.de\">langsoftware.de<\/a>\n    <\/p>\n\n    <footer>\n      <p>For the Terms of Use, see <a href=\"https:\/\/langsoftware.de\/?page_id=55\">langsoftware.de\/?page_id=55<\/a>.<\/p>\n    <\/footer>\n  <\/main>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>MyRing \u2014 Privacy Policy MyRing Privacy Policy Last updated: 28 May 2026 This policy explains what data MyRing processes, why, and how you can exercise your rights under the GDPR and other applicable privacy laws. By using MyRing you confirm that you have read and accepted this policy. 1. Controller The data controller responsible for [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":178,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-203","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/pages\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/langsoftware.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=203"}],"version-history":[{"count":1,"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/pages\/203\/revisions"}],"predecessor-version":[{"id":204,"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/pages\/203\/revisions\/204"}],"up":[{"embeddable":true,"href":"https:\/\/langsoftware.de\/index.php?rest_route=\/wp\/v2\/pages\/178"}],"wp:attachment":[{"href":"https:\/\/langsoftware.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}