Unity之SDK接入(OPPO)


簡介:首先介紹一下,為什么博主要選擇OPPO的SDK接入呢,因為OPPO的SDK接入是目前博主發現最簡單的SDK。所以,博主選擇OPPO,帶領大家接SDK從入門到精通

工作准備:

1.環境配置(SDK,JDK,Unity,eclipse的ADT)

2.資源下載(直接去OPPO開發者平台https://open.oppomobile.com/下載)

3.keystore准備,方法見下圖

在Unity中申請:

現在我們現在eclipse中新建android工程,方法如下:

名字自己隨意取,注意包名,最好與我的一樣,避免后面項目出錯!!!接着一直Next,直到最后finish,至此你的android工程創建好了。

現在我們按官方文檔的流程,先復制demo中的AndroidManifest.xml的代碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myoppogame.nearme.gamecente"
    android:versionCode="530"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>  
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    
    <application
        android:name="com.myoppogame.nearme.gamecente.MyApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name">
        <activity
            android:name="com.myoppogame.nearme.gamecente.MainActivity"
            android:label="@string/app_name" 
            android:screenOrientation="portrait"
            android:configChanges="keyboardHidden|orientation|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <!-- nearme game sdk config goes here -->
        <meta-data android:name="debug_mode" android:value="true" />    <!-- 日志開關,發布時候設置為false -->
        <meta-data android:name="is_offline_game" android:value="false" />  <!-- true:單機游戲   false:網游 -->
        <meta-data android:name="app_key" android:value="c5217trjnrmU6gO5jG8VvUFU0" />  <!--appKey,游戲上線時請務必替換成游戲自身的appkey-->
        
        <activity
            android:name="com.nearme.game.sdk.component.proxy.ProxyActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:theme="@style/Theme_Dialog_Custom"
            android:process=":gcsdk">
        </activity>
        <service
            android:name="com.nearme.game.sdk.component.proxy.ProxyApiService"
            android:process=":gcsdk"
            android:priority="1000">
        </service>
        <receiver
            android:name="com.nearme.game.sdk.component.proxy.ProxyUserCenterOperateReceiver"
            android:exported="true" 
            android:process=":gcsdk">
            <intent-filter>
                <action android:name="com.oppo.usercenter.account_login" />
                <action android:name="com.oppo.usercenter.account_logout" />
                <action android:name="com.oppo.usercenter.modify_name" />
            </intent-filter>
        </receiver>
        <!-- nearme game sdk config end -->
    </application>
</manifest>
View Code

 這個時候你會發現AndroidManifest.xml出錯了,這時候我們修改styles.xml的代碼為:

<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
    <style name="Theme_Dialog_Custom" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
    </style>
</resources>
View Code

現在復制下載的資料里面的如圖中的文件夾把工程里面的對應文件夾覆蓋

然后,我們需要添加MyApplication.java類,添加如下代碼:

package com.myoppogame.nearme.gamecente;

import com.nearme.game.sdk.GameCenterSDK;

import android.app.Application;

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        String appSecret = "e2eCa732422245E8891F6555e999878B";
        GameCenterSDK.init(appSecret, this);
    }
}
View Code

最后,添加MainActivity.java類的代碼:

package com.myoppogame.nearme.gamecente;

import com.nearme.game.sdk.GameCenterSDK;
import com.nearme.game.sdk.callback.ApiCallback;
import com.nearme.game.sdk.callback.GameExitCallback;
import com.nearme.game.sdk.common.util.AppUtil;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
   
        findViewById(R.id.Login_Activity).setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        Login_Btn();
                    }
                });
        findViewById(R.id.Quit_Activity).setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View arg0) {

                        Quit_Btn();
                    }
                });
    }
    private void Login_Btn() {
        GameCenterSDK.getInstance().doLogin(this, new ApiCallback() {

            @Override
            public void onSuccess(String resultMsg) {
                
            }

            @Override
            public void onFailure(String resultMsg, int resultCode) {
                
            }
        });
    }
    private void Quit_Btn()
    {
        GameCenterSDK.getInstance().onExit(MainActivity.this,
                new GameExitCallback() {

                    @Override
                    public void exitGame() {
                            // CP 瀹炵幇娓告垙閫�鍑烘搷浣滐紝涔熷彲浠ョ洿鎺ヨ皟鐢�?
                            // AppUtil宸ュ叿綾婚噷闈㈢殑�?�炵幇鐩存帴寮烘潃榪涚▼~
                        AppUtil.exitGameProcess(MainActivity.this);
                    }
                });
        }
}
View Code

注意:上面的包名,類名,如果和我的不同,記得修改成代碼中對應的包名。

下圖就是一個可以運行的android。下面介紹三種打包運行ADK的方法

方法一:直接在eclipse中打包成APK,在模擬器中運行(但是這種方法只是單純的android項目,並沒實現與Unity的交互)。

右擊項目,點擊export

選擇Android下的Export Android Application——>Next ——>

現在我們到了這一步,需要填寫密碼,這個我們可以在們把剛剛創建的賬戶密碼輸入,按照提示過程就成功生成了APK,安裝之后就可以在模擬器上運行。

方法二:將eclipse中的Android項目導成jar包,通過Unity導出APK。

用此方法,我們需要想給大家講點關於unity與Android通信的知識,我們知道,unity和android並不認識,兩者並不能直接實現通信,那怎么辦勒?這時候我們自然而然的想到使用中間件(橋梁作用),Unity提供了一個jar包來實現與外界通信,現在,我們需要將該包導入到Android工程中,方法如下:

按照下圖,找到Unity安裝目錄下的class.jar包

在方法一的基礎上按照下圖的指示完成相關操作

注意:因為博主不是用的同一個項目,所以后面的項目名和前面的會有差異,不過不影響,博主后面只是給大家演示過程。並不會對代碼進行修改,請大家見諒

 下面是該OPPO的Activity的模板

public class DemoActivity extends UnityPlayerActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        findViewById(R.id.Activity名字).setOnClickListener(
                new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        //TODO點擊1按鈕實現函數;
                    }
                });
        。。。
        。。。
    } 
    private void 1按鈕實現函數名()
    {
        GameCenterSDK.getInstance().do**( ,
        new ApiCallback() 
        {
            @Override
            public void onSuccess(String resultMsg) 
            {
                //TODO
            }

            @Override
            public void onFailure(String resultMsg, int resultCode) 
            {
                //TODO
            }
        });            
    }
    。。。
    。。。
}
    
View Code

注意包名的統一

 

編寫Unity代碼:

using System;
using UnityEngine;
using UnityEngine.UI;

public class CallAndroid : MonoBehaviour
{
    private Button login_Btn, quit_Btn;
    
    private AndroidJavaClass jc;
    private AndroidJavaObject jo;

    //單例模式
    private static CallAndroid _instance;
    public static CallAndroid Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new CallAndroid();
            }
            return _instance;
        }
    }

    void Start()
    {
        login_Btn = GameObject.Find("Login_Bnt").GetComponent<Button>();
        quit_Btn = GameObject.Find("Quit_Btn").GetComponent<Button>();

        _instance = this;
        jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
    }

    public void Login_Btn()
    {
        jo.Call("Login_Btn");
    }
    public void Quit_Btn()
    {
        jo.Call("Qiut_Btn");
    }
}
View Code

 unity打包(打包之注意以下兩點)

注意1:

注意2:

方法三:,通過Unity導出Android包,再導入eclipse,通過eclipse導出APK。

在上面Unity工程的基礎上,刪掉Plugins整文件夾(因為這是方法二從eclipse拖過來的,其實不刪也沒有影響,只是為了區分方法二,三的差別)

unity導出google插件,注意包名,keystore設置

將unity導出的包導入eclipse,就是一個android工程。刪掉下面三個類

后面對該工程的修改和方法一一樣。修改完后直接導出成APK包


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM