import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import com.eyeofcloud.ab.EyeofcloudUserContext;import com.eyeofcloud.ab.android.sdk.EyeofcloudClient;import com.eyeofcloud.ab.android.sdk.EyeofcloudManager;import com.eyeofcloud.ab.android.shared.DatafileConfig;import com.eyeofcloud.ab.android.shared.WorkerScheduler;import com.eyeofcloud.ab.event.internal.EventFactory;import com.eyeofcloud.ab.eyeofclouddecision.EyeofcloudDecision;import java.util.Random;import java.util.concurrent.TimeUnit;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// initEyeofcloud(); // change datafileHost DatafileConfig.defaultHost = "https://cdn.eyeofcloud.com"; // change eventHost EventFactory.EVENT_ENDPOINT = "https://event.eyeofcloud.com/v1/events"; EyeofcloudManager eyeofcloudManager = EyeofcloudManager.builder() .withEventDispatchInterval(1L, TimeUnit.SECONDS) .withDatafileDownloadInterval(15, TimeUnit.MINUTES) .withSDKKey("Your SDK") //change sdk .build(getApplicationContext()); WorkerScheduler.requestOnlyWhenConnected = false; EyeofcloudClient eyeofcloudClient = eyeofcloudManager.initialize(getApplicationContext(), R.raw.datafile); if(eyeofcloudClient.isValid()) { Random rnd = new Random(); boolean hasOnFlags = false; for (int i = 0; i < 10; i++) { String userId = (rnd.nextInt(9999 - 1000) + 1000) + ""; /* -------------------------------- Create hardcoded user & bucket user into a flag variation -------------------------------- */ EyeofcloudUserContext user = eyeofcloudClient.createUserContext(userId); // "product_sort" corresponds to a flag key in your Eyeofcloud project EyeofcloudDecision decision = user.decide("product_sort"); // did decision fail with a critical error? if (decision.getVariationKey() == null) { System.out.println("\n\ndecision error: " + decision.getReasons()); } // get a dynamic configuration variable // "sort_method" corresponds to a variable key in your Eyeofcloud project String sortMethod = null; try { sortMethod = decision.getVariables().getValue("sort_method", String.class); } catch (Exception e) { e.printStackTrace(); } if (decision.getEnabled()) { // Keep count how many visitors had the flag enabled hasOnFlags = true; } /* -------------------------------- Mock what the users sees with print statements (in production, use flag variables to implement feature configuration) -------------------------------- */ // always returns false until you enable a flag rule in your Eyeofcloud project String enabled = decision.getEnabled() ? "on" : "off"; System.out.println("\n\nFlag " + enabled + ". User number " + user.getUserId() + " saw flag variation: " + decision.getVariationKey() + " and got products sorted by: " + sortMethod + " config variable as part of flag rule: " + decision.getRuleKey()); } if (!hasOnFlags) { System.out.println("\n\nFlag was off for everyone. Some reasons could include:" + "\n1. Your sample size of visitors was too small. Rerun, or increase the iterations in the FOR loop" + "\n2. By default you have 2 keys for 2 project environments (dev/prod). Verify in Settings>Environments that you used the right key for the environment where your flag is toggled to ON." + "\n\nCheck your key at https://app.eyeofcloud.com/v2/projects/" + eyeofcloudClient.getProjectConfig().getProjectId() + "settings/implementation"); } } else { System.out.println("Eyeofcloud client invalid. Verify in Settings>Environments that you used the primary environment's SDK key"); } // close before exit to flush out queued events eyeofcloudClient.close(); }}
在 Android Studio 中,针对之前创建的示例控制台应用单击“运行”。输出类似于以下内容:
文本
Flag on. User number 9591 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Flag on. User number 5488 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Flag on. User number 2660 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as part of flag rule: buy_experimentFlag on. User number 9952 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Flag on. User number 5152 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as part of flag rule: buy_experimentFlag on. User number 5074 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Flag on. User number 4898 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as part of flag rule: buy_experimentFlag on. User number 2396 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as part of flag rule: buy_experimentFlag on. User number 8713 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Flag on. User number 9365 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as
EyeofcloudUserContext user = eyeofcloudClient.createUserContext(userId);// "product_sort" corresponds to the flag key you create in the Eyeofcloud appEyeofcloudDecision decision = user.decide("product_sort");
// always returns false until you enable a flag rule in the Eyeofcloud appif (decision.getEnabled()) { // "sort_method" corresponds to variable key you define in Eyeofcloud app Object sortMethod = decision.getVariables().toMap().get("sort_method"); System.out.println("sort_method: "+ sortMethod.toString());}
import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import com.eyeofcloud.ab.EyeofcloudUserContext;import com.eyeofcloud.ab.android.sdk.EyeofcloudClient;import com.eyeofcloud.ab.android.sdk.EyeofcloudManager;import com.eyeofcloud.ab.android.shared.DatafileConfig;import com.eyeofcloud.ab.android.shared.WorkerScheduler;import com.eyeofcloud.ab.event.internal.EventFactory;import com.eyeofcloud.ab.eyeofclouddecision.EyeofcloudDecision;import java.util.Random;import java.util.concurrent.TimeUnit;public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// initEyeofcloud(); // change datafileHost DatafileConfig.defaultHost = "https://cdn.eyeofcloud.com"; // change eventHost EventFactory.EVENT_ENDPOINT = "https://event.eyeofcloud.com/v1/events"; EyeofcloudManager eyeofcloudManager = EyeofcloudManager.builder() .withEventDispatchInterval(1L, TimeUnit.SECONDS) .withDatafileDownloadInterval(15, TimeUnit.MINUTES) .withSDKKey("1000563_ebf080bb426e7555") //change sdk .build(getApplicationContext()); WorkerScheduler.requestOnlyWhenConnected = false; EyeofcloudClient eyeofcloudClient = eyeofcloudManager.initialize(getApplicationContext(), R.raw.datafile); if(eyeofcloudClient.isValid()) { Random rnd = new Random(); boolean hasOnFlags = false; for (int i = 0; i < 10; i++) { String userId = (rnd.nextInt(9999 - 1000) + 1000) + ""; /* -------------------------------- Create hardcoded user & bucket user into a flag variation -------------------------------- */ EyeofcloudUserContext user = eyeofcloudClient.createUserContext(userId); // "product_sort" corresponds to a flag key in your Eyeofcloud project EyeofcloudDecision decision = user.decide("product_sort"); // did decision fail with a critical error? if (decision.getVariationKey() == null) { System.out.println("\n\ndecision error: " + decision.getReasons()); } // get a dynamic configuration variable // "sort_method" corresponds to a variable key in your Eyeofcloud project String sortMethod = null; try { sortMethod = decision.getVariables().getValue("sort_method", String.class); } catch (Exception e) { e.printStackTrace(); } if (decision.getEnabled()) { // Keep count how many visitors had the flag enabled hasOnFlags = true; } /* -------------------------------- Mock what the users sees with print statements (in production, use flag variables to implement feature configuration) -------------------------------- */ // always returns false until you enable a flag rule in your Eyeofcloud project String enabled = decision.getEnabled() ? "on" : "off"; System.out.println("\n\nFlag " + enabled + ". User number " + user.getUserId() + " saw flag variation: " + decision.getVariationKey() + " and got products sorted by: " + sortMethod + " config variable as part of flag rule: " + decision.getRuleKey()); MockPurchase(user); } if (!hasOnFlags) { System.out.println("\n\nFlag was off for everyone. Some reasons could include:" + "\n1. Your sample size of visitors was too small. Rerun, or increase the iterations in the FOR loop" + "\n2. By default you have 2 keys for 2 project environments (dev/prod). Verify in Settings>Environments that you used the right key for the environment where your flag is toggled to ON." + "\n\nCheck your key at https://app.eyeofcloud.com/v2/projects/" + eyeofcloudClient.getProjectConfig().getProjectId() + "settings/implementation"); } } else { System.out.println("Eyeofcloud client invalid. Verify in Settings>Environments that you used the primary environment's SDK key"); } // close before exit to flush out queued events eyeofcloudClient.close(); } // mock tracking a user event so you can see some experiment reports static void MockPurchase(EyeofcloudUserContext user) { System.out.println("Pretend that user made a purchase? y/n "); Random random = new Random(); String selected = random.nextBoolean() ? "y": "n"; System.out.println(selected); if (selected.equals("y")) { // track a user event you defined in the Eyeofcloud app user.trackEvent("buy"); System.out.println("Eyeofcloud recorded a purchase in experiment results for user " + user.getUserId()); } else { System.out.println("Eyeofcloud didn't record a purchase in experiment results for user " + user.getUserId()); } }}
Flag on. User number 2613 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as part of flag rule: buy_experimentPretend that user made a purchase? y/n nEyeofcloud didn't record a purchase in experiment results for user 2613Flag on. User number 9770 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Pretend that user made a purchase? y/n yEyeofcloud recorded a purchase in experiment results for user 9770Flag on. User number 5198 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Pretend that user made a purchase? y/n yEyeofcloud recorded a purchase in experiment results for user 5198Flag on. User number 8080 saw flag variation: off and got products sorted by: 购买 config variable as part of flag rule: default-rollout-182-270Pretend that user made a purchase? y/n nEyeofcloud didn't record a purchase in experiment results for user 8080Flag on. User number 8956 saw flag variation: new_variation1 and got products sorted by: 立即购买 config variable as part of flag rule: buy_experimentPretend that user made a purchase? y/n yEyeofcloud recorded a purchase in experiment results for user 8956
// Track how users behave when they see a flag variation// e.g., after your app processed a purchase, let Eyeofcloud know what happened:user.trackEvent("purchased");