private static AndroidJavaObject CallMethod(string methodName, AndroidJavaObject extrasBundle) { VerifyContentProvider(); AndroidJavaObject resultBundle; try { // Java: currentActivity.getContentResolver().call(Uri.parse("content://..."), methodName, null, extras) using (var context = UnityPlayerHelper.GetCurrentActivity()) using (var contentResolver = context.Call <AndroidJavaObject>(Android.ContextMethodGetContentResolver)) using (var uriClass = new AndroidJavaClass(Android.UriClass)) using (var uri = uriClass.CallStatic <AndroidJavaObject>(Android.UriMethodParse, ContentAuthority)) { resultBundle = contentResolver.Call <AndroidJavaObject>( Android.ContentResolverMethodCall, uri, methodName, null, extrasBundle); } } catch (AndroidJavaException ex) { throw new CookieApiException( string.Format("Failed to call {0} on the instant apps content provider.", methodName), ex); } if (resultBundle == null) { // This should only happen if the content provider is unavailable. throw new CookieApiException( string.Format("Null result calling {0} on the instant apps content provider.", methodName)); } return(resultBundle); }
private static void VerifyContentProvider() { if (_verifiedContentProvider) { return; } // Java: currentActivity.getPackageManager().resolveContentProvider("com.google.android.gms...", 0) using (var context = UnityPlayerHelper.GetCurrentActivity()) using (var packageManager = context.Call <AndroidJavaObject>(Android.ContextMethodGetPackageManager)) using (var providerInfo = packageManager.Call <AndroidJavaObject>( Android.PackageManagerMethodResolveContentProvider, Authority, 0)) { if (!PlaySignatureVerifier.VerifyGooglePlayServices(packageManager)) { throw new CookieApiException("Failed to verify the signature of Google Play Services."); } if (providerInfo == null) { throw new CookieApiException("Failed to resolve the instant apps content provider."); } var packageName = providerInfo.Get <string>(Android.ProviderInfoFieldPackageName); if (!string.Equals(packageName, Android.GooglePlayServicesPackageName)) { throw new CookieApiException( string.Format("Package \"{0}\" is an invalid instant apps content provider.", packageName)); } } Debug.Log("Verified instant apps content provider."); _verifiedContentProvider = true; }
/// <summary> /// Shows a dialog that allows the user to install the current instant app. /// <param name="referrer">Optional install referrer string.</param> /// </summary> public static void ShowInstallPrompt(string referrer = null) { using (var activity = UnityPlayerHelper.GetCurrentActivity()) using (var postInstallIntent = CreatePostInstallIntent(activity)) { ShowInstallPrompt(activity, IgnoredRequestCode, postInstallIntent, referrer); } }
/// <summary> /// This method can be called from an installed app to obtain a string that was included in /// the postInstallIntent provided by an instant app via <see cref="ShowInstallPrompt()"/>. /// It assumes that the current activity was the one that was launched by Play Store. /// </summary> /// <param name="extraKey">Key for obtaining a string extra from current activity's intent.</param> /// <returns>The string extra value.</returns> public static string GetPostInstallIntentStringExtra(string extraKey) { // Java: currentActivity.getIntent().getStringExtra(extraKey) using (var activity = UnityPlayerHelper.GetCurrentActivity()) using (var intent = activity.Call <AndroidJavaObject>(Android.ActivityMethodGetIntent)) { return(intent.Call <string>(Android.IntentMethodGetStringExtra, extraKey)); } }
public static AndroidJavaObject GetCurrentActivity() { return(UnityPlayerHelper.GetCurrentActivity()); }