Skip to main content

#Marketing Cloud90 debatiendo

iOSにおいてリッチプッシュ通知の画像およびカルーセルが表示されない事象について(SMC SDK 9.0.3)

iOSアプリにおいて、リッチプッシュ通知の画像およびカルーセルプッシュのカルーセルが表示されない事象が発生しております。

以下の公式ドキュメントに従い、Notification Service Extension(NSE)およびNotification Content Extension(NCE)を実装しておりますが、期待どおりに動作していない状況です。

■ 参考ドキュメント 

https://developer.salesforce.com/docs/marketing/mobile-unified-sdk/guide/mc_engagement_push_notifications_ios.html

1. 発生事象

  • リッチプッシュ通知を受信しても、通知に画像が表示されない。
  • カルーセルプッシュ通知を受信しても、カルーセルが表示されない。

2. 前提条件・実施済みの設定

  • SMC SDKバージョン: 9.0.3
  • NSEを追加し、UNNotificationServiceExtension を継承した SFMCNotificationService を実装済み。
  • NCEを追加し、UIViewController を継承した SFMCNotificationViewController を実装済み。
  • 拡張機能用の MCExtensionSDK をNSE/NCEに設定済み。
  • Marketing Cloudのコンソールにて「Advanced Template Category」を設定済み。
  • NCEの Info.plist にて UNNotificationExtensionCategory を設定し、コンソール側の「Advanced Template Category」と紐付け済み。
  • リッチプッシュおよびカルーセルプッシュの通知ペイロードにて、aps 内の "mutable-content": 1 を確認済み。
  • NCEの Info.plist から NSExtensionMainStoryboard の参照を削除し、MainInterface.storyboard をプロジェクトから削除済み。
  • NCEの Info.plist に NSExtensionPrincipalClass を追加し、$(PRODUCT_MODULE_NAME).NotificationViewController を設定済み。
  • NCEの Info.plist に UNNotificationExtensionUserInteractionEnabled = YES を設定済み。
  • メインアプリおよびNSE/NCEにApp Groupsを設定し、各ターゲットで同一の SF_MARKETINGCLOUD_APP_GROUP_KEY(group.<bundle-id>.sfmarketingcloudsdk)を設定済み。
  • カルーセルプッシュの通知ペイロードにて、aps 内の category がMarketing Cloudのコンソールで設定した「Advanced Template Category」と一致していることを確認済み。
  • NSE/NCE用のプロビジョニングプロファイルをそれぞれ作成済み。メインアプリと同じ証明書を使用するよう設定し、Xcodeでも各ターゲットに対応するプロビジョニングプロファイルを指定済み。

3. 現時点で確認できていること・懸念点

NSEの SFMCNotificationService クラスにて、通知受信時に呼び出される想定の sfmcDidReceive() メソッド内で、UNMutableNotificationContent を使用して通知タイトルや本文を変更する動作確認を行いました。

しかし、変更内容が通知に反映されず、sfmcDidReceive() 自体が呼び出されていない可能性があると考えております。

そのため、NSEが正常に起動・実行されていないこと、またはNCEが正常に起動していないことが、今回の事象に関係している可能性を懸念しております。 

 

#Marketing Cloud

0/9000

Hi Trailblazer Community,

We have been experiencing intermittent email delivery failures to Gmail recipients from Salesforce Marketing Cloud (SFMC) since 15 August 2026. The issue affects multiple sending domains and appears sporadically.

Issue description

We are observing the following symptoms:

  • Emails sent to Gmail recipients are intermittently rejected.
  • SPF and DMARC authentication results sometimes show as Fail, while other messages show Pass.
  • Some failures are recorded as Unknown Bounces in SFMC.
  • When we investigate the bounce details using the SFMC _Bounce Data View and review our deliverability monitoring reports, we see Gmail SMTP error 550-5.7.25, indicating that the sending IP may be missing a valid PTR (reverse DNS) record or that the corresponding forward DNS entry does not resolve back to the sending IP.
  • The issue is occurring across multiple sending domains rather than being isolated to one domain.

Investigation completed so far

  1. Our domain team has confirmed that no DNS record changes were made during the period under investigation.
  2. The Salesforce team has also indicated that they have not made any DNS record changes.
  3. We have reviewed SPF, DKIM and DMARC configurations, which appear correctly configured, although intermittent authentication failures are still reported.
  4. The bounce details and deliverability monitoring reports indicate PTR-related failures for the sending IP.

We are trying to establish whether this is related to the sending IP infrastructure, reverse DNS configuration, DNS resolution inconsistencies, or another underlying issue.

Questions for the community

  1. Has anyone experienced similar intermittent Gmail delivery failures in SFMC since 15 August 2026?
  2. Can a PTR or forward-confirmed reverse DNS issue occur intermittently even when the DNS configuration appears correct?
  3. If multiple sending domains are affected, could the underlying issue be related to a shared Salesforce sending IP pool or Salesforce-managed infrastructure?
  4. What is the recommended approach to correlate SFMC _Bounce Data View records with the actual Gmail SMTP rejection responses and the sending IP used for each message?
  5. Has Salesforce Support identified any known issues or infrastructure changes that could cause this behavior?

We would appreciate insights from anyone who has resolved a similar issue, particularly where SPF, DKIM and DMARC configurations appeared correct but Gmail continued to report PTR-related delivery failures.

Thank you in advance for your help. 

 

#Marketing Cloud  #Marketing Cloud Engagement  #Email Deliverbility  #MC Domain Verification

2 respuestas
  1. Ayer, 8:03

    Hi @Mradul Srivastava

     

     

    Not sure if helpful as our issue was with Microsoft, but we had a similar situation earlier this year. Everything our end was the same as it's always been but suddenly we had a lot of hard bounces to Microsoft email addresses only.  

     

    The cause was an IP restriction on their end due to another sender in our shared IP pool. I was able to get this restriction removed with the help of Salesforce and Microsoft support teams.

0/9000

Good afternoon everyone, how are you? 

 

I have a question regarding the following scenario: I have a client who is about to implement MC Next and wants to proceed with development in a sandbox. 

 

In this case, do we need to complete the full MC Next + Data Cloud setup in production first, and then repeat it in the sandbox? Or, once the setup is done in production, will it correctly mirror to the SANDBOX environment? 

 

Because the scenario I encountered was: the client provided the sandbox environment for us to work in, but while setting up MC Next after activating Data Cloud, I ran into some blockers to proceed with the setup. This raised the question of whether it is necessary to do everything in production first before doing it in the sandbox. 

 

Thank you ! 

 

MC Next - SANDBOX Environment

 

 

 

#Trailhead  #Salesforce Developer  #Salesforce Admin  #Salesforce  #TrailblazerCommunity  #Marketing Cloud

3 respuestas
  1. 16 oct, 7:34

    Hi @Guilherme Sequine, here are some of the practices I see most customers adopting: 

    1. SMS: if you have sender codes for Production and Dev use, set up both in Production first, then refresh the sandbox. A code can only be active in one org at a time, so both live in Production but only the real one is active there; in the sandbox, deactivate the real one and activate the test one.
    2. Email: sending domains, From addresses and tracking domains don't copy to sandboxes and can't be deployed between orgs. To send from your own domain, each sandbox needs its own authenticated sending domain; if your sandbox is long lasting and it is relatively easy for you to set a DKIM on your / your customer's domain, a separate subdomain per sandbox keeps it clean. If not, I believe you can activate the "Use a substitute email address for unverified domains" in Setup > Deliverability. It is worth a quick test.
    3. Data 360: provision in Production first, then activate Data 360 in each sandbox separately (if the sandbox exists before Data 360 on Production, activate Data 360 in Production and then refresh the sandbox, or use Match Production Licenses, which can take up to 24h). Connections copy over from Production but come across deactivated, so you need to activate each one. The CRM home connection switches to point at the sandbox org automatically when you activate it.

    There are a lot of helpful videos at this link, including the first one that talks about deployment back to Production: https://help.salesforce.com/s/articleView?id=mktg.mktg_videos.htm&type=5

     

     

    I hope this helps :-)

0/9000

I am trying to create a list for our email purposes, and I am new to Salesforce Marketing Cloud. Whenever I try to create a filtered list from our parent list source, I get this error message. Does anyone know how to solve  

How to solve for the expression error on marketing cloud to create curated list?

 

this?  

 

#Marketing Cloud

1 respuesta
  1. 13 oct, 23:01

    Check that your filter criteria operators and data types match correctly (such as comparing text fields with text values or ensuring numeric fields aren't evaluated as strings). Additionally, make sure you aren't referencing invalid fields or combining multiple incompatible operators that trigger evaluation conflicts in the filter canvas. Here is a video about the filtered data extensions that you are trying to do: https://www.youtube.com/watch?v=fNH_PSHtksI

0/9000

I just took the Marketing Cloud Engagement Specialist exam in Spanish, and I’m extremely disappointed with the experience. The translation was so poor that some questions were genuinely difficult to understand. I chose to take the exam in my native language to avoid confusion under pressure, but the Spanish version ended up being even more confusing than English.

It’s incredibly frustrating to spend time preparing for an exam and then struggle to understand the questions because of the quality of the translation. I honestly did not expect such a poor translation from Salesforce, especially for a professional certification exam. 

 

#Certifications  #Marketing Cloud

1 comentario
  1. 12 oct, 20:06

    I'm sorry about your experience, but thank you for sending the feedback Sofia. We've passed it along.

0/9000

Good afternoon everyone, how are you? 

 

I would like to ask a question regarding the email dynamic content for abandoned carts, where we need the ProductName, CurrentPrice, ProductImageURL, and PDPUrl information. Is it necessary to have a Data Graph configured in order to perform a test send with the dynamic personalization based on our Trigger Events? 

 

Because so far we have basically everything configured and are correctly receiving the abandoned cart event data, but when we simulate a send via the flow, none of our emails are dynamically populated. 

 

I created my entire flow based on this link: https://medium.com/@marketingcloudtips/marketing-cloud-next-abandoned-shopping-cart-trigger-d1039e12bf79

 

 

If we missed anything, please help us out! Thank you ! 

 

#Trailhead  #Salesforce Developer  #Salesforce Admin  #Salesforce  #TrailblazerCommunity  #Flow  #Marketing Cloud

4 respuestas
  1. 7 oct, 23:21

    @Guilherme Sequine Saquei! 

     

    O evento chegar no flow e no Data Cloud confirma que o carrinho abandonado está entrando. A vitrine é outro passo: ela só repete os produtos quando o Repeater tem uma fonte, e cada campo de dentro (imagem, nome, preço e link) é merge field dessa mesma fonte. Com o layout estático, o teste envia o e-mail e a vitrine vem vazia ou fixa. 

     

    O data graph só alimenta a vitrine quando ela está em Data Graph Attribute. Nesse caso ele precisa incluir o DMO dos itens do carrinho, no caminho Unified Individual → Unified Link Individual → Individual → itens, com nome, preço, imagem e URL marcados. O e-mail usa o graph padrão do Setup (Customer Engagement), salvo se tiverem colocado outro na própria mensagem. Esse graph atualiza na agenda, então o carrinho pode já estar no Data Cloud e ainda não estar disponível para a vitrine. Um graph só de perfil envia o e-mail e não tem linha de produto para repetir. 

     

    Para esse teste, liguem a vitrine no evento, que é o payload que vocês já validaram. No e-mail, aba Data Sources, adicionem o evento de carrinho abandonado (o mesmo do flow). No Repeater, definam o Repeater Source nesse evento, nos itens do carrinho. Dentro da vitrine, a imagem entra como Merge field, e nome, preço e URL do botão também, todos dessa mesma fonte. Salvam e fazem o preview com a pessoa que gerou o evento. Se nome e preço aparecerem e a imagem continuar em branco, incluam o domínio da imagem em Setup → Trusted URLs.

0/9000

I’m building a welcome journey in SFMC for first-time customers, with emails on Days 0, 3 and 7. The entry Data Extension is overwritten daily, but customers already in the journey continue using their Journey Data.

I want customers who unsubscribe during a wait to exit the journey before the next email. My source DE has a Marketing Consent field, but it isn’t automatically updated when someone unsubscribes.

What is the recommended way to configure this? Can Exit Criteria read the current All Subscribers or publication-list status directly, or do I need a separate status DE linked in Contact Builder? If a separate DE is needed, how should its status be kept updated?

Also, my fictional test customer exists in the entry DE but not in All Subscribers. How can I test this exit rule correctly? 

 

#Marketing Cloud  #Journey Builder

4 respuestas
  1. 7 oct, 9:45

    Hi @Swetha reddy

    , 

     

    Even though Salesforce Marketing Cloud (SFMC) automatically blocks emails to anyone marked "Unsubscribed" in the All Subscribers list, relying solely on that list won't remove them from the Journey canvas. If you want contacts to leave the journey when they officially opt out, or if consent comes from an external CRM, use one of the two approaches below.

     

    Option 1: Use Journey Exit Criteria via Contact Builder (Recommended)

    Journey Builder cannot read the All Subscribers list or Publication Lists directly in Exit Criteria. It requires a linked Data Extension under Contact Data.

     

    1. Create a Consent / Unsubscribe Data Extension (DE)
    • Include fields such as SubscriberKey (Primary Key) and ConsentStatus or Status.

    2.Keep the DE Updated Automatically

    • If consent is tracked inside SFMC: Set up a scheduled Automation Studio query targeting the _Unsubscribe data view or _Subscribers data view to populate this DE regularly (e.g., hourly).
    • If consent comes from Salesforce CRM or an external system: Use Synchronized Data Extensions or an incoming API/file import to keep this DE up to date.

    3. Link the DE in Contact Builder

    • Go to Contact Builder > Data Designer.
    • Create an Attribute Group and link your Consent DE to the Contact record using Contact Key = SubscriberKey (1-to-1 relationship).

    4. Set the Exit Criteria in Journey Builder

    • Select Contact Data (not Journey Data).
    • Configure the rule: Consent DE -> Status equals 'Unsubscribed'.
    • How it works: Whenever a contact finishes a wait activity, Journey Builder evaluates the Exit Criteria. If their record in Contact Data shows they opted out, they immediately exit before the next email is sent.

     

    Option 2: Suppress via Exclusion Script (Quick Workaround)

    If you do not want to configure an Attribute Group in Contact Builder, you can keep contacts inside the journey path but prevent the emails from sending:

     

    1. Maintain an updated Unsubscribed_DE containing SubscriberKey.
    2. Add an Exclusion Script to each Email Activity in the journey:

    Code snippet

     

    ROWCOUNT(LOOKUPROWS("Unsubscribed_DE", "SubscriberKey", AttributeValue("_SubscriberKey"))) > 0

    If their key appears in the unsubscribe list, SFMC skips sending the email.

     

    How to Test This with Fictional Test Customers

    Because your fictional customer is not in All Subscribers yet:

     

    1. Add them to All Subscribers first: Perform a simple test send (or standard User-Initiated send) to your test record so SFMC registers the SubscriberKey and email address in All Subscribers.
    2. Enter the Journey: Inject the test subscriber into your Journey.
    3. Trigger the Unsubscribe Mid-Wait: While the contact is paused in the Day 0–3 Wait activity:
    • Change their status in your Consent DE (or in All Subscribers / your CRM).
    • Run your update query/automation so the linked Contact Data DE reflects Status = Unsubscribed.

    4. Verify the Exit: When the wait timer expires, inspect the Journey canvas health and history. The contact will show as Exited via Exit Criteria rather than moving to the next email.

0/9000

The idea would be to allow users to enter data such as Journey investment/cost, number of customers impacted, conversion rate, average order value, and revenue generated, and have the system automatically calculate the ROI. In addition to revenue generated, I’d also like to consider cost avoidance for Journeys that don’t necessarily generate revenue but help reduce or avoid costs. What other inputs, metrics, and formulas would you consider important to make this calculation more reliable, especially when it comes to incremental revenue, cost avoidance, and control groups ? 

 

#Marketing Cloud  #Marketing Cloud Engagement  #Tactics Driving Marketing ROI  #Journey Builder

3 respuestas
  1. Lukas Lunow (NoA Ignite) Forum Ambassador
    27 ago, 20:31

    Good question, and one I'd like to answer properly, but the honest answer is that the shape of what you build changes completely depending on a few things you haven't told us yet. So let me ask rather than guess. 

     

    First, a snag in the input list. You've got conversion rate, AOV and revenue generated as separate inputs. Those can't all be independent, either revenue is derived (contacts × CR × AOV) or it's measured from actual order data. If both, the calculator can disagree with itself on day one. Which is it meant to be? 

     

    Is this a forecast or a scorecard? A pre-launch business case with sliders and ranges, and a post-launch "what did this actually earn us" report, are two different artefacts. Same formulas, completely different data sources and completely different build. Most of these tools get abandoned because they try to be both. 

     

    Are your journeys always-on or campaign-shaped? For an always-on journey, ROI isn't a number, it's a curve. Contacts keep entering, conversion rate drifts, build cost is sunk and shrinking per contact over time. You'd need entry cohorts and a payback view, not a single figure. 

     

    Do you already have holdouts running? This is the big one. Without a control group you're not measuring incremental anything, and no amount of formula design fixes that. If you do have them: are they persisted per contact, or re-rolled with Random Split on each entry? And is there a global holdout as well as per-journey ones? (Per-journey lifts don't sum to portfolio lift, and the gap matters.)

     

    Where do revenue and cost data actually live? MCE has neither revenue nor margin nor cost of goods. That pushes the actuals half of this toward Data 360 / your warehouse / Tableau, with MCE contributing engagement and holdout membership. Is that available to you, or are you constrained to build inside MCE? 

     

    Who owns the cost-avoidance assumptions? Cost avoidance is where business cases go to get manufactured. If Finance hasn't signed off on "cost per deflected call," it's a soft number and should be flagged as one. 

     

    One last thing, said kindly: most of this question isn't really MCE-specific. Incrementality design, control-group methodology, margin vs revenue, cost-avoidance taxonomy: that's marketing measurement, and it would be true if you were running Braze or a spreadsheet. The genuinely MCE-shaped slice is narrow: how to persist a holdout flag so it survives re-entry, how to get engagement data out into something that can join it to orders, and whether a Cloud Page + assumptions DE is a sane place to put the front end. Happy to go deep on that slice here, since that's what this group is good at. 

     

    For the measurement-design half you'll get better answers where the analytics and architecture folks hang out. The Marketing Architects group, or a Data 360 / Tableau group. Genuinely worth cross-posting; it's a good question, just a two-venue one. 

     

    Tell me which of these apply and I'll happily go into the formulas with you.

0/9000

Is there anyone who knows someone or is willing to teach, giving back to the community, in a free initiative where you will be teaching SMFC to the other beings who are totally new to it? It's giving back to the community. You will be keen to key in, and you will become part of the community. It's not mandatory; you can teach in your free space either on weekdays or any days.  #Trailhead Challenges #Trailhead #Marketing Cloud

0/9000

Hi everyone,

I’m working with Salesforce Marketing Cloud (SFMC) Next and am having an issue with Progressive Profiling / Dynamic Form Visibility.

I have created a form where I want certain fields to be displayed conditionally based on the value of another field.

My configuration

  • I have a Country field on the form.
  • The Country field is populated with the value "USA".
  • I created a Progressive Profiling Rule for another field (for example, State).
  • The rule is configured as:

Show this field when:

 

All Conditions Are Met

Condition:

 

Country

Equal USA

  • I also added the relevant fields to the Data Graph.
  • The Data Graph contains the Country field and the other profile fields being used by the form.
  • However, the State field is not dynamically appearing/hiding as expected, even when Country = USA.

I’ve attached screenshots showing:

  1. The Progressive Profiling rule configuration.
  2. The form where Country is populated as USA, but the conditional field behavior is not working.
  3. The Data Graph configuration showing that the Country field is included.

Expected behavior

When the Country value is USA, I expect the State field to become visible based on the Progressive Profiling rule.

Actual behavior

The conditional visibility does not appear to be working. The field remains hidden / does not dynamically display even though the condition appears to be satisfied. 

Progressive Profiling Rule Not Working in SFMC Next – Dynamic Form Visibility Based on Data Graph Field

 

image.png

 

image.png

 

 

 

 

 

#Marketing Cloud

1 respuesta
  1. 4 oct, 5:46

    A common gotcha here is that the rule evaluates against the profile data in the data graph, not the value currently sitting in the form field. So even though the form shows USA, if the contact's stored profile record does not actually have Country = USA, the rule will not fire. Worth double-checking the exact casing too, the comparison can be case sensitive. And make sure you republished the form after adding the rule, draft changes do not take effect on the live form.

0/9000