本記事では、Unity環境においてMOB技術社のShareSDKを統合し、QQによるユーザー認証、およびQQ・WeChatへのコンテンツシェア機能を実装する手順を解説します。なお、WeChatログインは企業審査が必要なため、今回は実装範囲から除外しています。
事前準備と設定
実装を開始する前に、各プラットフォームにおける開発者登録およびアプリケーション登録が必要です。
- MOBへの登録:MOB公式サイトにて開発者アカウントを作成します。
- Tencent QQの登録:Tencent QQオープンプラットフォームでアプリを作成し、「APPID」と「APPKEY」を発行・控えておきます。
- MOBアプリの作成:MOBのダッシュボード上でアプリを新規作成し、発行されたAppKeyを保存します。
Unityプロジェクトへの導入
- MOBのサイトからUnity専用のSDKパッケージをダウンロードし、プロジェクトへインポートします。
- シーン内の適当なGameObjectに
ShareSDKコンポーネントをアタッチし、MOBダッシュボードで取得したAppKeyを入力します。 ShareSDKスクリプト内のDevInfo定義箇所を開き、QQ用のクラス設定にあるIDとKEYを、Tencent QQオープンプラットフォームで取得した値に書き換えます。
QQ認証機能の実装
認証処理を行うためのスクリプトを作成し、先ほどShareSDKをアタッチしたオブジェクトに追加します。以下にコード例を示します。
using cn.sharesdk.unity3d;
using UnityEngine;
public class SocialManager : MonoBehaviour
{
private ShareSDK sdkBridge;
void Awake()
{
// ShareSDKコンポーネントの参照を取得
sdkBridge = GetComponent<ShareSDK>();
// コールバックの設定
sdkBridge.authHandler = OnAuthorizationComplete;
sdkBridge.shareHandler = OnShareComplete;
}
/// <summary>
/// QQでのユーザー認証をリクエストします
/// </summary>
public void RequestQQLogin()
{
sdkBridge.Authorize(PlatformType.QQ);
}
/// <summary>
/// 認証結果のコールバック処理
/// </summary>
private void OnAuthorizationComplete(int reqID, ResponseState state, PlatformType type, Hashtable data)
{
if (state == ResponseState.Success)
{
Debug.Log("認証に成功しました");
// ユーザー情報の取得とJSON出力
Hashtable userInfo = sdkBridge.GetAuthInfo(PlatformType.QQ);
Debug.Log(MiniJSON.jsonEncode(userInfo));
}
else if (state == ResponseState.Fail)
{
Debug.LogError("認証失敗: " + data["msg"]);
}
else if (state == ResponseState.Cancel)
{
Debug.Log("認証がキャンセルされました");
}
}
}
シェア機能の実装
シェア機能では、テキストや画像URLなどを含むShareContentオブジェクトを生成し、対象プラットフォームへ送信します。QQおよびWeChat向けの実装例は以下の通りです。
/// <summary>
/// QQへコンテンツをシェアします
/// </summary>
public void ExecuteQQShare()
{
var shareParams = new ShareContent();
shareParams.SetTitle("シェアテスト");
shareParams.SetText("これはUnityからのテスト投稿です。");
shareParams.SetTitleUrl("https://example.com");
shareParams.SetImageUrl("https://example.com/image.jpg");
shareParams.SetShareType(ContentType.Image);
// QQプラットフォームを指定してシェア
sdkBridge.ShareContent(PlatformType.QQ, shareParams);
}
/// <summary>
/// WeChatへコンテンツをシェアします
/// </summary>
public void ExecuteWeChatShare()
{
var shareParams = new ShareContent();
shareParams.SetTitle("WeChatテスト");
shareParams.SetText("WeChatへの送信テスト");
shareParams.SetImageUrl("https://example.com/image.jpg");
shareParams.SetUrl("https://example.com");
shareParams.SetShareType(ContentType.Image);
// WeChatプラットフォームを指定してシェア
sdkBridge.ShareContent(PlatformType.WeChat, shareParams);
}
/// <summary>
/// シェア結果のコールバック処理
/// </summary>
private void OnShareComplete(int reqID, ResponseState state, PlatformType type, Hashtable result)
{
switch (state)
{
case ResponseState.Success:
Debug.Log(type + "へのシェアが成功しました: " + MiniJSON.jsonEncode(result));
break;
case ResponseState.Fail:
Debug.LogError(type + "へのシェアが失敗しました");
break;
case ResponseState.Cancel:
Debug.Log(type + "へのシェアがキャンセルされました");
break;
}
}
全プラットフォーム選択画面の表示
特定のプラットフォームを指定せず、ユーザーにプラットフォームを選択させるシェアシート(ShareMenu)を表示するには、以下のメソッドを使用します。
public void ShowShareMenu()
{
var content = new ShareContent();
// 共有コンテンツの設定(タイトル、画像など)
content.SetText("全プラットフォーム向けシェア");
content.SetImageUrl("https://example.com/image.jpg");
// プラットフォーム選択リストを表示
// 座標は任意で調整してください
sdkBridge.ShowPlatformList(null, content, 100, 100);
}
各プラットフォームで受け付けるパラメータや挙動の詳細については、SDKに付属のDemoスクリプトやShareContentクラスの定義を参照ください。