<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dolapo Olakanmi</title>
    <description>The latest articles on DEV Community by Dolapo Olakanmi (@dolapo_olakanmi_6ae9cf74f).</description>
    <link>https://dev.to/dolapo_olakanmi_6ae9cf74f</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3522932%2F70e69959-1208-4dfc-ae73-5d72771ba285.jpg</url>
      <title>DEV Community: Dolapo Olakanmi</title>
      <link>https://dev.to/dolapo_olakanmi_6ae9cf74f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dolapo_olakanmi_6ae9cf74f"/>
    <language>en</language>
    <item>
      <title>Using .p12 Certificates for APNs Authorization in FCM Flutter Integration</title>
      <dc:creator>Dolapo Olakanmi</dc:creator>
      <pubDate>Fri, 10 Apr 2026 00:43:58 +0000</pubDate>
      <link>https://dev.to/dolapo_olakanmi_6ae9cf74f/using-p12-certificates-for-apns-authorization-in-fcm-flutter-integration-31el</link>
      <guid>https://dev.to/dolapo_olakanmi_6ae9cf74f/using-p12-certificates-for-apns-authorization-in-fcm-flutter-integration-31el</guid>
      <description>&lt;p&gt;Okay, I know using .p12 for APNs authentication is not recommended but hear me out. You might just need it which was the case for me. So, why not?&lt;/p&gt;

&lt;p&gt;Ideally, you should use .p8 — recommended by Apple—for anything APNs Authorization on whatever push notification platforms you are using.&lt;/p&gt;

&lt;p&gt;To send push notifications to iOS apps, an authenticated connection to Apple Push Notifications services (APNs) is required. You can authenticate using a .p8 key which is token-based key or a .p12 file which is certificate-based method but one is required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn6ezzczd63dc1dpvy5m.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn6ezzczd63dc1dpvy5m.webp" alt=" " width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If for some reason you don’t have a .p8 auth key and can not revoke for whatever reason, you can use the .p12 file which needs to be renewed yearly. We will see how to create this file for a project.&lt;/p&gt;

&lt;p&gt;Recommended: It is recommended to use .p8 auth key if you can please use that.&lt;/p&gt;

&lt;p&gt;To do this, make sure you have the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An iOS mobile app&lt;/li&gt;
&lt;li&gt;A paid Apple Developer Account with admin Access.&lt;/li&gt;
&lt;li&gt;An FCM account with owner role&lt;/li&gt;
&lt;li&gt;A Mac with Xcode 14+&lt;/li&gt;
&lt;li&gt;A Bundle ID for your app target as set in Xcode.&lt;/li&gt;
&lt;li&gt;An Xcode project with Push Notification capability enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Generate a push certificate&lt;/li&gt;
&lt;li&gt;You first need to create a certificate signing request .&lt;strong&gt;certSigningRequest&lt;/strong&gt; file (csr) on macOS.&lt;/li&gt;
&lt;li&gt;To do this go to Application &amp;gt; Utilities &amp;gt; Keychain Access.&lt;/li&gt;
&lt;li&gt;Then launch the Certificate Assistant.&lt;/li&gt;
&lt;li&gt;From the Menu bar click KeyChain Access &amp;gt; Certificate &amp;gt; Request a Certificate from a certificate Authority&lt;/li&gt;
&lt;li&gt;The image is provided below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3eeyscxv5v3p42ty6lz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw3eeyscxv5v3p42ty6lz.webp" alt=" " width="709" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You should see a dialog, Enter the necessary information.&lt;/li&gt;
&lt;li&gt;You can leave out CA Email Address blank&lt;/li&gt;
&lt;li&gt;Then select save to disk.&lt;/li&gt;
&lt;li&gt;Click the Continue button and save to preferred location.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0b7lfsaqnwf3hmoodlz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0b7lfsaqnwf3hmoodlz.webp" alt=" " width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Enable push capabilities for the app.&lt;/li&gt;
&lt;li&gt;By going to the identifier section of the Apple Developer portal.&lt;/li&gt;
&lt;li&gt;Locate and select your App ID from the list.&lt;/li&gt;
&lt;li&gt;Enable push Notification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjpi58qm3xd0cffwtn21.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsjpi58qm3xd0cffwtn21.webp" alt=" " width="800" height="142"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a push certificate.&lt;/li&gt;
&lt;li&gt;Go to the &lt;strong&gt;Certificate&lt;/strong&gt; section of the Apple Developer portal.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;+ sign&lt;/strong&gt; to create a new certificate.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8swhjfr7o9tinwyeynff.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8swhjfr7o9tinwyeynff.webp" alt=" " width="800" height="190"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Under the Services, select &lt;strong&gt;Apple Push Notification service SSL (Sandbox &amp;amp; Production)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Then click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fottvptqosjsp3di4qs08.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fottvptqosjsp3di4qs08.webp" alt=" " width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the next screen select your &lt;strong&gt;APP ID&lt;/strong&gt; from the list and click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhmc9adaz29gcd8vjfrdt.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhmc9adaz29gcd8vjfrdt.webp" alt=" " width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Upload the previous generated .&lt;strong&gt;certSigningRequest&lt;/strong&gt;. click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;br&gt;
On the next screen click &lt;strong&gt;Download&lt;/strong&gt;.&lt;br&gt;
You should have a .&lt;strong&gt;cer&lt;/strong&gt; file&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Create a private key and export the .p12 certificate&lt;/li&gt;
&lt;li&gt;Double click the downloaded .&lt;strong&gt;cer&lt;/strong&gt; file to import it into KeyChain Access.&lt;/li&gt;
&lt;li&gt;In Keychain Access, navigate to:&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keychains &amp;gt; Login&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Category &amp;gt; My Certificates&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Locate the certificate named &lt;strong&gt;Apple Push Services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Right-click&lt;/strong&gt; the certificate and select &lt;strong&gt;Export&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose a location to save the file, and select the file format as .p12. When prompted, you can set a &lt;strong&gt;password for the .p12 file (this password is required when uploading to services like FCM&lt;/strong&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;You should have your .p12 file ready for upload to any push notification service. The next step is integrating FCM to your flutter project.&lt;br&gt;
You follow this steps:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Step 5:
&lt;/h2&gt;

&lt;p&gt;I’ll assume you already know how to set up a target and its bundle identifier in Xcode, as well as configure flavors and package names in Android Studio. Once that’s in place, you can use the following command to configure each environment. In this example, we’re setting up the &lt;strong&gt;dev&lt;/strong&gt; environment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configure flutterfire: You can copy the command below and paste on the terminal with the your appropriate value.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutterfire config &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--project&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;project-id &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;lib/firebase_options_dev.dart &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ios-bundle-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;com.bundle.id.dev &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--ios-out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ios/flavors/dev/GoogleService-Info.plist &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--android-package-name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;com.package.name.dev &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--android-out&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;android/app/src/dev/google-services.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select the platform your application supports:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp19wc7qliktwb8ipq24h.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp19wc7qliktwb8ipq24h.webp" alt=" " width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Depending on what you want you can either select the Build Configuration or Targets. In this case, I selected the Target.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibisj4m911g3h98cwos9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fibisj4m911g3h98cwos9.webp" alt=" " width="800" height="83"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select the specific target:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbcibgj45hckxubl48xp.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbcibgj45hckxubl48xp.webp" alt=" " width="800" height="121"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;After this, the appropriate files will be created in your flutter &lt;strong&gt;lib&lt;/strong&gt; folder, ios &lt;strong&gt;flavor&lt;/strong&gt; folder and android &lt;strong&gt;src&lt;/strong&gt; folder.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Reference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://documentation.onesignal.com/docs/flutter-sdk-setup" rel="noopener noreferrer"&gt;https://documentation.onesignal.com/docs/flutter-sdk-setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://codewithandrea.com/articles/flutter-firebase-multiple-flavors-flutterfire-cli/" rel="noopener noreferrer"&gt;https://codewithandrea.com/articles/flutter-firebase-multiple-flavors-flutterfire-cli/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://firebase.flutter.dev/docs/messaging/apple-integration/" rel="noopener noreferrer"&gt;https://firebase.flutter.dev/docs/messaging/apple-integration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>ios</category>
      <category>mobile</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Cryptography vs Encryption</title>
      <dc:creator>Dolapo Olakanmi</dc:creator>
      <pubDate>Fri, 10 Apr 2026 00:14:36 +0000</pubDate>
      <link>https://dev.to/dolapo_olakanmi_6ae9cf74f/cryptography-vs-encryption-13ef</link>
      <guid>https://dev.to/dolapo_olakanmi_6ae9cf74f/cryptography-vs-encryption-13ef</guid>
      <description>&lt;p&gt;What is cryptography?&lt;br&gt;
Cryptography is the science of securing information and communications using mathematical techniques to protect data from unauthorized access or tampering. It includes Encryption, Hashing, Digital signature and Authentication.&lt;/p&gt;

&lt;p&gt;What is encryption?&lt;br&gt;
Encryption is a technique in cryptography used to converts plain text into ciphertext. It typically uses a key to encrypt data or information. There are two types of encryptions which are Symmetric(uses the same key for encryption and decryption) and asymmetric(uses a public key and a private key).&lt;/p&gt;

</description>
      <category>security</category>
      <category>mobile</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
