游戏(Unity、Cocos2d)等单activity应用的集成方式

置顶 飞翔的蜗牛 2年前 3,010次点击 来自 Android

很多游戏厂家利用了Unity或者Cocos之类的框架,只有一个Activity。此时如何集成?
名字解释:
SplashActivity:指的是首页,替换成你们首页的类名即可。同理activity_splash也替换成你们自己首页的布局
mwshow:指的是你们特有的scheme,替换成你们自己的scheme

①AndroidManifest.xml内配置好scheme,比如

        <activity
            android:name=".activity.SplashActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <data android:scheme="mwshow" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
            
        </activity>

②Activity内完成如下配置即可。

@Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_splash);
        initMW();
        registerForMLinkCallback();
        Uri mLink = getIntent().getData();
        MLink.getInstance(SplashActivity.this).deferredRouter();

        if (mLink != null) {
            MLink.getInstance(this).router(mLink);
        } else {
            MLink.getInstance(this).checkYYB();
        }
    }
    private void initMW() {
        MWConfiguration config = new MWConfiguration(this);
        config.setDebugModel(true)
                .setPageTrackWithFragment(true)
                .setWebViewBroadcastOpen(true)
                .setSharePlatform(MWConfiguration.ORIGINAL);
        MagicWindowSDK.initSDK(config);
    }
    private  void registerForMLinkCallback() {
        MLink mLink = MLink.getInstance(this);
        mLink.registerDefault(new MLinkCallback() {
            @Override
            public void execute(Map<String, String> paramMap, Uri uri, Context context) {
                //todo: 获取动态参数,用来处理
                String id = "";
                if (paramMap != null) {
                    id = paramMap.get("id");
                } else if(uri!=null) {
                    id = uri.getQueryParameter("id");
                }
                //todo: 此处可以根据获取的动态参数id来做相应的处理

//                Intent intent = new Intent(context, WXEntryActivity.class);
//                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
//                context.startActivity(intent);
            }
        });
    }

    @Override
    public void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Uri mLink = intent.getData();
        setIntent(intent);
        if (mLink != null) {
            MLink.getInstance(this).router(mLink);
        } else {
            MLink.getInstance(this).checkYYB();
        }
    }
4 条回复
飞翔的蜗牛 1个月前

经过客户反馈,很多是把启动模式改为SingleTask可以修复。

        <activity
            android:name=".activity.SplashActivity"
            android:launchMode="singleTask">
            <intent-filter>
                <data android:scheme="testscheme"/>
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

772100606@qq.com 8个月前

@飞翔的蜗牛

您好,我使用的是cocos2dx单activity,我按您的集成方式集成的app,在接入后发现来这种情况,有两种表现,一种是程序闪退,一种是程序一直黑屏。
在排查之后,我发现已经存在的activity,再次通过短链接进入游戏时,还是会访问activity的onCreate,然后就会出现上述两种情况,当我吧魔窗sdk删除时,就不会有这种情况,并且不会访问oncreate,请问这个是怎么发生的。

经常有客户反馈,游戏集成魔窗时,通过链接打开App时出现崩溃。
此问题是App本身的问题,具体可以根据崩溃信息自己debug一下。


魔窗, 移动互联网生态领导者