最近做了一个facebook(简称:fb)的受众优化功能。受众优化?什么是受众?什么是受众优化?简单来说就是:在fb上发广告时,你会在发广告的时候设置这条广告可以被什么样的人看到。例如我想让江苏省,年龄在20~30之间的女性看到这条广告,这在facebook市场营销中,是可以发广告,来定位这些人群的。而这些人群就是受众。受众优化:就是通过AI学习,让你的广告被更可能买你产品的人看到。所以我们要做的就是将crm(客户关系管理系统)中的有效数据(我们传的是crm中的邮箱)通过fb的接口传给fb,这样AI拿到数据,就可以进行学习,让受众更加准确。详解见facebook官网https://developers.facebook.com/docs/marketing-api/audiences-api
将自己系统中crm中邮箱数据,传到fb;这里需要注意的是:我们上传到fb数据是json数组,而不是一个json对象
import java.util.ArrayList;
import java.util.List;
import com.facebook.ads.sdk.APIContext;
import com.facebook.ads.sdk.CustomAudience;
import com.facebook.ads.sdk.User;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.xhl.cuss.social.audienceoptimization.util.FBAudienceOptimizationUtil;
public class TestAudience {
public void testFacebookAudience() throws Exception{
List<String> emails = new ArrayList<String>();//需要受众优化的邮箱集合
emails.add("*****@163.com");
emails.add("*****@qq.com");
String fbToken = "";//fbtoken
String audienceId = "23843006257588608";//自定义受众id
APIContext context = new APIContext(fbToken).enableDebug(true);
JsonObject params = new JsonObject();
JsonArray emailsha = new JsonArray();
emailsha.add("EMAIL_SHA256");
params.add("schema", emailsha);
JsonArray email = FBAudienceOptimizationUtil.transformEmails(emails);
params.add("data", email);//json数组,而不是json对象
// String params3 = "{\"schema\":[\"EMAIL_SHA256\"],\"data\":[[\"*****@163.com\"],
//[\"*******@qq.com\"]]}";
if(email != null && email.size() > 0){
if (audienceId != null && !"".equals(audienceId)) {
User user = new CustomAudience(audienceId,
context).createUser().setPayload(params.toString()).execute();//使用单键匹配添加用户
}
}
}
}
由于fb要求必须使用 SHA256 对数据进行哈希处理,所有下面是对数据哈希处理的工具类
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.JsonArray;
public class FBAudienceOptimizationUtil {
public static String sha256(String message) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(message
.getBytes(StandardCharsets.UTF_8));
return toHex(hash);
} catch (Exception e) {
return null;
}
}
public static String toHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%1$02x", b));
}
return sb.toString();
}
public static JsonArray transformEmails(List<String> emails){
JsonArray email1 = null;
JsonArray result = new JsonArray();
if(emails != null && emails.size() > 0){
for(String email : emails){
if(email == null || "".equals(email))
continue;
email1 = new JsonArray();
email1.add(email.trim());
result.add(email1);
}
}
return result;
}
public static void main(String[] args) {
String params3 = "{\"schema\":[\"EMAIL_SHA256\"],\"data\":
[[\"******@gmail.com\"],[\"******@qq.com\"]]}";
List<String> emails = new ArrayList<String>();
emails.add("*********@gmail.com");
emails.add("*********@gmail.com");
emails.add("*********@gmail.com");
System.out.println(transformEmails(emails));
System.out.println(transformEmails(emails).toString());
System.out.println(params3);
}
}
注意:我们这里是将数据上传到自定义受众中,然后进行受众优化。即您在fb商务管理平台https://business.facebook.com上创建的应该是下面的自定义受众;怎么在fb商务平台创建受众,就咨询你们公司的运营同事吧~~~