title: Android Play Vimeo Video
body: <p>I want to play my Vimeo videos and I've followed the steps in <a href="https://github.com/vimeo/vimeo-networking-java" rel="nofollow">https://github.com/vimeo/vimeo-networking-java</a>.</p>
  
  <p>I used this method to get the Video object and then load it into a WebView.</p>
  
  <pre><code>VimeoClient.getInstance().fetchNetworkContent(String uri, ModelCallback callback) 
  </code></pre>
  
  <p>However, when I logged the result, it seems to indicate that it fails.</p>
  
  <p>Here are my 2 Java files.</p>
  
  <p><strong>MyVimeoApplication.java</strong></p>
  
  <pre><code>import android.app.Application;
  import android.content.Context;
  import android.content.pm.PackageInfo;
  import android.content.pm.PackageManager;
  import android.os.Build;
  import android.util.Log;
  
  import com.vimeo.networking.Configuration;
  import com.vimeo.networking.Vimeo;
  import com.vimeo.networking.VimeoClient;
  
  public class MyVimeoApplication extends Application
  {
  private static final String SCOPE = "private public interact";
  
  private static final boolean IS_DEBUG_BUILD = false;
  // Switch to true to see how access token auth works.
  private static final boolean ACCESS_TOKEN_PROVIDED = false;
  private static Context mContext;
  
  @Override
  public void onCreate()
  {
      super.onCreate();
      mContext = this;
  
      Configuration.Builder configBuilder;
      // This check is just as for the example. In practice, you'd use one technique or the other.
      if (ACCESS_TOKEN_PROVIDED)
      {
          configBuilder = getAccessTokenBuilder();
          Log.d("ACCESS_TOKEN", "PROVIDED");
      }
      else
      {
          configBuilder = getClientIdAndClientSecretBuilder();
          Log.d("ACCESS_TOKEN", "NOT PROVIDED");
      }
      if (IS_DEBUG_BUILD) {
          // Disable cert pinning if debugging (so we can intercept packets)
          configBuilder.enableCertPinning(false);
          configBuilder.setLogLevel(Vimeo.LogLevel.VERBOSE);
      }
      VimeoClient.initialize(configBuilder.build());
  }
  
  public Configuration.Builder getAccessTokenBuilder() {
      // The values file is left out of git, so you'll have to provide your own access token
      String accessToken = getString(R.string.access_token);
      return new Configuration.Builder(accessToken);
  }
  
  public Configuration.Builder getClientIdAndClientSecretBuilder() {
      // The values file is left out of git, so you'll have to provide your own id and secret
      String clientId = getString(R.string.client_id);
      String clientSecret = getString(R.string.client_secret);
      String codeGrantRedirectUri = getString(R.string.deeplink_redirect_scheme) + "://" +
              getString(R.string.deeplink_redirect_host);
      Configuration.Builder configBuilder =
              new Configuration.Builder(clientId, clientSecret, SCOPE, null,
                      null);
  //        configBuilder.setCacheDirectory(this.getCacheDir())
  //                .setUserAgentString(getUserAgentString(this)).setDebugLogger(new NetworkingLogger())
  //                // Used for oauth flow
  //                .setCodeGrantRedirectUri(codeGrantRedirectUri);
  
      return configBuilder;
  }
  
  public static Context getAppContext() {
      return mContext;
  }
  
  public static String getUserAgentString(Context context) {
      String packageName = context.getPackageName();
  
      String version = "unknown";
      try {
          PackageInfo pInfo = context.getPackageManager().getPackageInfo(packageName, 0);
          version = pInfo.versionName;
      } catch (PackageManager.NameNotFoundException e) {
          System.out.println("Unable to get packageInfo: " + e.getMessage());
      }
  
      String deviceManufacturer = Build.MANUFACTURER;
      String deviceModel = Build.MODEL;
      String deviceBrand = Build.BRAND;
  
      String versionString = Build.VERSION.RELEASE;
      String versionSDKString = String.valueOf(Build.VERSION.SDK_INT);
  
      return packageName + " (" + deviceManufacturer + ", " + deviceModel + ", " + deviceBrand +
              ", " + "Android " + versionString + "/" + versionSDKString + " Version " + version +
              ")";
  }
  }
  </code></pre>
  
  <p><strong>MainActivity.java</strong></p>
  
  <pre><code>import android.app.ProgressDialog;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.util.Log;
  import android.webkit.WebView;
  import android.widget.Toast;
  
  import com.vimeo.networking.VimeoClient;
  import com.vimeo.networking.callbacks.AuthCallback;
  import com.vimeo.networking.callbacks.ModelCallback;
  import com.vimeo.networking.model.Video;
  import com.vimeo.networking.model.error.VimeoError;
  
  public class MainActivity extends AppCompatActivity
  {
  private VimeoClient mApiClient = VimeoClient.getInstance();
  private ProgressDialog mProgressDialog;
  
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      mProgressDialog = new ProgressDialog(this);
      mProgressDialog.setMessage("All of your API are belong to us...");
  
      // ---- Client Credentials Auth ----
      if (mApiClient.getVimeoAccount().getAccessToken() == null) {
          // If there is no access token, fetch one on first app open
          authenticateWithClientCredentials();
      }
  }
  
  // You can't make any requests to the api without an access token. This will get you a basic
  // "Client Credentials" gran which will allow you to make requests
  private void authenticateWithClientCredentials() {
      mProgressDialog.show();
      mApiClient.authorizeWithClientCredentialsGrant(new AuthCallback() {
          @Override
          public void success()
          {
              Toast.makeText(MainActivity.this, "Client Credentials Authorization Success", Toast.LENGTH_SHORT).show();
              mProgressDialog.hide();
  
              mApiClient.fetchNetworkContent("https://vimeo.com/179708540", new ModelCallback&lt;Video&gt;(Video.class)
              {
                  @Override
                  public void success(Video video)
                  {
                      // use the video
                      Log.d("VIDEO", "SUCCESS");
                      String html = video.embed != null ? video.embed.html : null;
                      if(html != null)
                      {
                          // html is in the form "&lt;iframe .... &gt;&lt;/iframe&gt;"
                          // load the html, for instance, if using a WebView on Android, you can perform the following:
                          WebView webview = (WebView) findViewById(R.id.webView); // obtain a handle to your webview
                          webview.loadData(html, "text/html", "utf-8");
                      }
                  }
  
                  @Override
                  public void failure(VimeoError error)
                  {
                      Log.d("VIDEO", "FAIL");
                      Toast.makeText(MainActivity.this, error.toString(), Toast.LENGTH_SHORT).show();
                      // voice the error
                  }
              });
  
          }
  
          @Override
          public void failure(VimeoError error) {
              Toast.makeText(MainActivity.this, "Client Credentials Authorization Failure", Toast.LENGTH_SHORT).show();
              mProgressDialog.hide();
          }
      });
  }
  }
  </code></pre>