Unity3D,QQ分享功能

參考雨鬆博客http://www.xuanyusong.com/archives/2159和騰訊SDK完成。html

一、首先第一步配置好騰訊的SDK,騰訊開發官網有教程。android

Elipse下Android安卓Activity代碼app

package com.example.androidqqsharetest;ide

 

import com.tencent.connect.common.Constants;
import com.tencent.connect.share.QQShare;
import com.tencent.connect.share.QzoneShare;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;
import com.unity3d.player.UnityPlayerActivity;oop


import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;測試

import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;this

import android.widget.Button;spa


public class MainActivity extends UnityPlayerActivity{.net

private int shareType = QQShare.SHARE_TO_QQ_TYPE_DEFAULT; // 分享的消息類型
private Tencent mTencent;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTencent = Tencent.createInstance("你申請的APPID", this.getApplicationContext());
}


IUiListener qqShareListener = new IUiListener() {
@Override
public void onCancel() {
if (shareType != QQShare.SHARE_TO_QQ_TYPE_IMAGE) {
}
}
@Override
public void onComplete(Object response) {
}
@Override
public void onError(UiError e) {
}
};




// 特別注意應用在調用Android_SDK 接口時,若是成功接收到回調,須要在調用接口的 Activity 的onActivityResult 方法中增長以下代碼
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
imTencent.onActivityResult(requestCode, resultCode, data);
}



//這個方法是在Unity中調用的。參數是當前的Activity。
public void LoginAndSend(final Activity currentActivity)
{
//必定要在UI線程中來執行騰訊API中的方法。
//API中的方法應該是開啓了一個線程,一切由Unity調用的方法裏面只要開啓線程就會出現
//Can’t create handler inside thread that has not called Looper.prepare() 錯誤
//寫在runOnUiThread 的線程中能夠避免這個錯誤沒,之前在處理Unity發送新浪微博的時候也遇到這樣的錯誤。
//一樣能夠按照這種方法來解決。

currentActivity.runOnUiThread(new Runnable() {插件

@Override
public void run()
{
MyShareToQQ();
}
});
}



// 分享到QQ
public void MyShareToQQ() {

final Bundle bundle = new Bundle();
// 這條分享消息被好友點擊後的跳轉URL
bundle.putString(QQShare.SHARE_TO_QQ_TARGET_URL, "http://www.uzzf.com/news/7399.html");
// // 分享的標題
bundle.putString(QQShare.SHARE_TO_QQ_TITLE, "QQZone 分享 Testing");
// // 分享圖片的URL
bundle.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, "http://171.109.34.16:8088/460.jpg");
// // 分享的消息摘要最多50
bundle.putString(QQShare.SHARE_TO_QQ_SUMMARY, "Monster的分享測試");
bundle.putString(QQShare.SHARE_TO_QQ_APP_NAME, "AndroidQQShareTest");
bundle.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
Log.v("IMAGEURL", imageUrl);
mTencent.shareToQQ(this, bundle, qqShareListener);

}


}

 

二、導出jar包到Unity3D中,參考http://i.cnblogs.com/EditPosts.aspx?opt=1,注意看完這篇參考博客,最底下有個錯誤解決方法。本人反正是遇到了。

Unity3D工程目錄錄以下:其中OneKeyShare是從Eclipse導出的jar包。open_sdk是騰訊的包。其中res文件夾,libs文件夾,AndroidManifest文件都是從Eclipse工程直接拉進來。

 

 

 

三、而後在U3D中,綁定在任意對象中, 把Activity傳遞給Android插件中。

using UnityEngine;
using System.Collections;

public class ShareToQQZone : MonoBehaviour
{

void OnGUI()
{

if (GUILayout.Button(" Send QQ zone", GUILayout.Height(200), GUILayout.Width(300)))
{

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
{
jo.Call("LoginAndSend", jo);

}

}

}
}

 
 
四、接下來我發現Eclipse導出的jar包比較大,有2.98M。一個插件這麼大以爲很佔空間。因此研究有什麼能夠從中剔除,最後發現: 

bin文件佔用比較大的體積,試着刪除其中佔用空間較大的classes.dex文件,發現運行依然正常。

隨後又刪除不相關的圖片文件。圖片文件通常佔用較大空間。

刪除libs的android-support-v4.jar文件。mta-sdk-1.6.2.jar文件,依然能夠運行。

這樣導出來的jar包縮小爲1.41M。

刪除dexedLibs文件夾下的android-support-v4.jar,mta-sdk-1.6.2.jar文件。

再次刪除bin文件夾下的APK文件,發現導出的jar包減少到899K極大地縮小了程序佔用的空間!!插件依然能夠正常使用!

 

 

最後是Android和Unity3D工程下載連接http://pan.baidu.com/s/1bnbFwbd

相關文章
相關標籤/搜索