UnityプロジェクトへのShareSDK導入とQQ/WeChat連携機能の実装

本記事では、Unity環境においてMOB技術社のShareSDKを統合し、QQによるユーザー認証、およびQQ・WeChatへのコンテンツシェア機能を実装する手順を解説します。なお、WeChatログインは企業審査が必要なため、今回は実装範囲から除外しています。

事前準備と設定

実装を開始する前に、各プラットフォームにおける開発者登録およびアプリケーション登録が必要です。

  1. MOBへの登録:MOB公式サイトにて開発者アカウントを作成します。
  2. Tencent QQの登録:Tencent QQオープンプラットフォームでアプリを作成し、「APPID」と「APPKEY」を発行・控えておきます。
  3. MOBアプリの作成:MOBのダッシュボード上でアプリを新規作成し、発行されたAppKeyを保存します。

Unityプロジェクトへの導入

  1. MOBのサイトからUnity専用のSDKパッケージをダウンロードし、プロジェクトへインポートします。
  2. シーン内の適当なGameObjectにShareSDKコンポーネントをアタッチし、MOBダッシュボードで取得したAppKeyを入力します。
  3. 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クラスの定義を参照ください。

7月27日 17:41 投稿