diff --git a/lib/facebook_ads/ad_objects/server_side/user_data.rb b/lib/facebook_ads/ad_objects/server_side/user_data.rb index e3d1d063..1a542cb4 100644 --- a/lib/facebook_ads/ad_objects/server_side/user_data.rb +++ b/lib/facebook_ads/ad_objects/server_side/user_data.rb @@ -198,6 +198,10 @@ def external_id=(external_id) # The lead ID for the user in this transaction. This ID is associated with a lead generated by Facebook's Lead Ads. attr_accessor :lead_id + # The ID issued by Meta when a person first logs into an instance of an app. + # Also known as the App-Scoped ID. This value must not be hashed. + attr_accessor :fb_login_id + # The first 5 letters of the first name. attr_accessor :f5first @@ -271,6 +275,7 @@ def madid=(madid) # @param [String] fbp # @param [String] subscription_id # @param [String] lead_id + # @param [String] fb_login_id # @param [String] f5first # @param [String] f5last # @param [String] fi @@ -288,7 +293,7 @@ def initialize(email: nil, emails: nil, phone: nil, phones: nil, gender: nil, ge first_name: nil, first_names: nil, city: nil, cities: nil, state: nil, states: nil, country_code: nil, country_codes: nil, zip_code: nil, zip_codes: nil, external_id: nil, external_ids: nil, client_ip_address: nil, - client_user_agent: nil, fbc: nil, fbp: nil, subscription_id: nil, lead_id: nil, + client_user_agent: nil, fbc: nil, fbp: nil, subscription_id: nil, lead_id: nil, fb_login_id: nil, f5first: nil, f5last: nil, fi: nil, dobd: nil, dobm: nil, doby: nil, anon_id: nil, anon_ids: nil, madid:nil, madids: nil, ctwa_clid: nil, page_id: nil) validate_constructor_values(emails, email, 'emails', 'email') @@ -387,6 +392,9 @@ def initialize(email: nil, emails: nil, phone: nil, phones: nil, gender: nil, ge unless lead_id.nil? self.lead_id = lead_id end + unless fb_login_id.nil? + self.fb_login_id = fb_login_id + end unless f5first.nil? self.f5first = f5first end @@ -518,6 +526,9 @@ def build(attributes = {}) if attributes.has_key?(:'lead_id') self.lead_id = attributes[:'lead_id'] end + if attributes.has_key?(:'fb_login_id') + self.fb_login_id = attributes[:'fb_login_id'] + end if attributes.has_key?(:'f5first') self.f5first = attributes[:'f5first'] @@ -585,6 +596,7 @@ def ==(o) fbp == o.fbp && subscription_id == o.subscription_id && lead_id == o.lead_id && + fb_login_id == o.fb_login_id && f5first == o.f5first && f5last == o.f5last && fi == o.fi && @@ -623,6 +635,7 @@ def hash fbp, subscription_id, lead_id, + fb_login_id, f5first, f5last, fi, @@ -692,6 +705,9 @@ def to_s unless lead_id.nil? hash['lead_id'] = lead_id end + unless fb_login_id.nil? + hash['fb_login_id'] = fb_login_id + end unless f5first.nil? hash['f5first'] = f5first end @@ -780,6 +796,9 @@ def normalize unless lead_id.nil? hash['lead_id'] = lead_id end + unless fb_login_id.nil? + hash['fb_login_id'] = fb_login_id + end unless f5first.nil? hash['f5first'] = FacebookAds::ServerSide::Util.normalize(f5first, 'f5first') end diff --git a/spec/lib/facebook_ads/ad_objects/server_side/user_data_spec.rb b/spec/lib/facebook_ads/ad_objects/server_side/user_data_spec.rb index e7c8613f..ad65b64d 100644 --- a/spec/lib/facebook_ads/ad_objects/server_side/user_data_spec.rb +++ b/spec/lib/facebook_ads/ad_objects/server_side/user_data_spec.rb @@ -30,6 +30,7 @@ state: 'state-9', zip_code: 'zip-code-10', external_id: 'external-id-100', + fb_login_id: 'fb-login-id-111', f5first: 'f5first-11', lead_id: 'lead_id-112', f5last: 'f5last-12', @@ -57,6 +58,7 @@ 'zp' => ["zp_#{attrs[:zip_code]}-normalized"], 'external_id' => [attrs[:external_id]], 'lead_id' => attrs[:lead_id], + 'fb_login_id' => attrs[:fb_login_id], 'f5first' => "f5first_#{attrs[:f5first]}-normalized", 'f5last' => "f5last_#{attrs[:f5last]}-normalized", 'fi' => "fi_#{attrs[:fi]}-normalized", @@ -119,6 +121,7 @@ state: 'state-9', zip_code: 'zip-code-10', lead_id: 'lead-id-100', + fb_login_id: 'fb-login-id-101', f5first: 'f5first-11', f5last: 'f5last-12', fi: 'fi-13', @@ -138,6 +141,7 @@ state: 'state-9', zip_code: 'zip-code-10', lead_id: 'lead-id-100', + fb_login_id: 'fb-login-id-101', f5first: 'f5first-11', f5last: 'f5last-12', fi: 'fi-13', @@ -167,6 +171,7 @@ state: 'state-9', zip_code: 'zip-code-10', lead_id: 'lead-id-100', + fb_login_id: 'fb-login-id-101', f5first: 'f5first-11', f5last: 'f5last-12', fi: 'fi-13', @@ -186,6 +191,7 @@ state: 'state-9', zip_code: 'zip-code-10', lead_id: 'lead-id-100', + # fb_login_id intentionally omitted to trigger inequality f5first: 'f5first-11', f5last: 'f5last-12', fi: 'fi-13', @@ -265,11 +271,13 @@ attrs = { city: 'seattle', cities: ['menlopark', 'paloalto'], + fb_login_id: 'fb-login-id-500', } user_data.build(attrs) expect(user_data.city).to eq(attrs[:cities][0]) expect(user_data.cities).to eq(attrs[:cities]) + expect(user_data.fb_login_id).to eq(attrs[:fb_login_id]) end it 'constructor fails validation if both single and multi-values are specified' do