Implementing Privacy Consent and Publishing Unity Games on TapTap Platform

Developer Account Registration

Begin by registering a TapTap developer account, which requires 1-2 days for verification. Use the official registration portal: https://developer.taptap.cn/developer-apply/

Personal developers without software copyright certificates or publication licenses can only release trial versions. Applications with in-app purchases or paid content require proper documentasion. Select the appropriate account type during registration, as TapTap doesn't support conversion between personal and enteprrise accounts.

Privacy Consent Implementation

Applications must display a privacy consent dialog before accessing user data. Configure this in Unity:

  1. Navigate to Project Settings → Player → Publishing Settings
  2. Enable Custom Main Manifest

This generates AndroidManifest.xml in Assets/Plugins/Android. Modify the file:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.unity3d.player.PrivacyConsentActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="useLocalHtml" android:value="false" />
            <meta-data android:name="policyUrl" android:value="YOUR_POLICY_URL" />
        </activity>
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
            android:theme="@style/UnityThemeSelector">
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

Create PrivacyConsentActivity.java in Android/com/unity3d/player:

package com.unity3d.player;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class PrivacyConsentActivity extends Activity implements DialogInterface.OnClickListener {
    boolean useLocalContent = true;
    String policyUrl = "YOUR_POLICY_URL";
    final String localContent = "Application terms and privacy policy description...";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        try {
            ActivityInfo activityInfo = this.getPackageManager().getActivityInfo(
                getComponentName(), PackageManager.GET_META_DATA);
            useLocalContent = activityInfo.metaData.getBoolean("useLocalHtml");
            policyUrl = activityInfo.metaData.getString("policyUrl");
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        if (hasConsent()) {
            launchMainActivity();
            return;
        }
        displayConsentDialog();
    }

    @Override
    public void onClick(DialogInterface dialog, int choice) {
        switch (choice) {
            case AlertDialog.BUTTON_POSITIVE:
                saveConsent(true);
                launchMainActivity();
                break;
            case AlertDialog.BUTTON_NEGATIVE:
                finish();
                break;
        }
    }

    private void displayConsentDialog() {
        WebView contentView = new WebView(this);
        if (useLocalContent) {
            contentView.loadDataWithBaseURL(null, localContent, "text/html", "UTF-8", null);
        } else {
            contentView.loadUrl(policyUrl);
            contentView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }

                @Override
                public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError err) {
                    view.reload();
                }
            });
        }

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
        dialogBuilder.setCancelable(false);
        dialogBuilder.setView(contentView);
        dialogBuilder.setTitle("Terms and Privacy");
        dialogBuilder.setNegativeButton("Decline", this);
        dialogBuilder.setPositiveButton("Accept", this);
        dialogBuilder.create().show();
    }

    private void launchMainActivity() {
        Intent mainIntent = new Intent();
        mainIntent.setClassName(this, "com.unity3d.player.UnityPlayerActivity");
        this.startActivity(mainIntent);
    }

    private void saveConsent(boolean accepted) {
        SharedPreferences.Editor editor = getSharedPreferences("AppSettings", MODE_PRIVATE).edit();
        editor.putBoolean("PrivacyConsent", accepted);
        editor.apply();
    }

    private boolean hasConsent() {
        SharedPreferences prefs = getSharedPreferences("AppSettings", MODE_PRIVATE);
        return prefs.getBoolean("PrivacyConsent", false);
    }
}

Build Configuration

Configure Unity for Android builds:

  1. Project Settings → Player → Other Settings → Configuration
  2. Set Scripting Backend to IL2CPP
  3. Enable both ARMv7 and ARM64 under Target Architectures

Build the APK file after completing these configurations.

Application Submission

Complete the developer profile with required information, including a valid website URL. Create the application listing for Mainland China region.

Key submission requirements:

  • All materials must meet platform specifications
  • Screenshots cannot be from in-game scenes
  • Privacy policy URL is mandatory for trial versions

Generate privacy policy content using tools like https://toolbox.yolo.blue/privacy-policy-gen and host the document on platforms like YouDao Notes for URL generation.

Initially set the application to testing phase to identify device-specific issues before formal release. Update the status to正式上线(试玩版)when ready for public availability.

Tags: unity TapTap Android Privacy Policy Game Publishing

Posted on Tue, 19 May 2026 17:32:38 +0000 by JamieinNH