untiy接入微信SDK实现iOS分享功能

说明:
使用平台:mac电脑

Unity处理

  1. 进入微信开发者官网申请应用

2.下载微信的开发工具包sdk导入untiy的 Assest/Plugins/iOS/WechatSDK 目录下

3.在Assest/Plugins/iOS下新建.h文件 CustomAppController.mm,为了Xcode打包的时候用自己定义的AppController,微信官方也说过要重写一些方法

// CustomAppController.mm
#import "WXApiManager.h"#import "UnityAppController.h"
@interface CustomAppController : UnityAppController
@endIMPL_APP_CONTROLLER_SUBCLASS (CustomAppController)@implementation CustomAppController- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{[super application:application didFinishLaunchingWithOptions:launchOptions];// TODOreturn YES;
}- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler
{return [WXApi handleOpenUniversalLink:userActivity delegate:[WXApiManager sharedManager]];
}@end

4.在Assest/Plugins/iOS下新建WeChatUnity文件夹,处理unity和微信sdk的通信,并在此文件夹下新建.h文件:WXApiManager.h

// WXApiManager.h#import <Foundation/Foundation.h>
#import "WXApi.h"@interface WXApiManager : UIResponder<UIApplicationDelegate, WXApiDelegate>+ (instancetype)sharedManager;@end

5.在Assest/Plugins/iOS/WeChatUnity下新建WeChatUnity.mm文件,负责微信sdk的初始化和分享功能的封装

// WeChatUnity.mm#import <Foundation/Foundation.h>
#import "WXApiManager.h"#define UNITY_CS_API extern"C"static NSString *mWXAppid = nil;// 将c字符串const char* 转为 oc字符串NSString
static inline NSString * str_c2ns(const char*s)
{if (s)return [NSString stringWithUTF8String: s];elsereturn [NSString stringWithUTF8String: ""];
}// 初始化
UNITY_CS_API void UnityWeChatInit(const char* appId, const char* universalLink)
{mWXAppid = str_c2ns(appId);[WXApi registerApp:mWXAppid universalLink:str_c2ns(universalLink)];
}// 封装分享接口UNITY_CS_API void UnityWeChatLogin(const char* state)
{NSLog(@"UnityWeChatLogin");// 此时会拉起微信,授权后会回调WXApiManager的onResp方法SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];req.bText = YES;req.text = @"分享的内容";req.scene = WXSceneSession;[WXApi sendReq:req completion:^(BOOL success){NSLog(@"微信分享:%@", success ? @"成功" : @"失败");}];
}

6.注册回调,在Assest/Plugins/iOS/WeChatUnity下新建WXApiManager.mm,编写分享的回调

#import "WXApiManager.h"@implementation WXApiManager// 单例
+(instancetype)sharedManager {static dispatch_once_t onceToken;static WXApiManager *instance;dispatch_once(&onceToken, ^{instance = [[WXApiManager alloc] init];});return instance;
}- (void)onReq:(BaseReq *)req {// TODO 微信回调,从微信端主动发送过来的请求
}// WXApiManager.mm- (void)onResp:(BaseResp *)resp {if ([resp isKindOfClass:[SendMessageToWXReq class]]) {NSLog(@"微信授权回调");if (resp.errCode == 0) {UnitySendMessage("SDKCallBack", "WeChatLoginCallback", "234");//象征性传一个234}else{// 失败,回调给UnityUnitySendMessage("SDKCallBack", "WeChatLoginCallback", "");}}
}
@end

7.看到上面的回调会调用unity方法了吧,我们需要建一个SDKCallBack类,里面写个WeChatLoginCallback方法。

// SDKCallBack.csusing UnityEngine;public class SDKCallBack : MonoBehaviour
{/// <summary>/// 分享回调/// </summary>/// <param name="callBackInfo"></param>public void WechatLoginCallback(string callBackInfo){if (string.IsNullOrEmpty(callBackInfo)){// TODO 分享失败,请重试Debug.LogWarning("分享失败");}else{Debug.LogWarning("分享成功");}}
}

8.建立c#脚本WechatSDK.cs进行sdk的初始化,方法是UnityWeChatLogin代表分享意思

// WeChatSDK.csusing System.Runtime.InteropServices;
using UnityEngine;public class WeChatSDK
{public static void Init(){
#ifUNITY_IOSUnityWeChatInit(@"你的AppId", "你的Universal Links");
#elif UNITY_ANDROID// TODO Android的调用
#endif}#if UNITY_IOS[DllImport("__Internal")]static extern void UnityWeChatInit(string appId, string universalLink);
#endif// 登录public static void Login(){
#if UNITY_IOS// "app_wechat"为传给分享的数据UnityWeChatLogin("app_wechat");
#elif UNITY_ANDROID// TODO Android的调用
#endif}#if UNITY_IOS[DllImport("__Internal")]static extern void UnityWeChatLogin(string state);
#endif}

9.untiy这边的处理就完了,建一个Test脚本做sdk的初始化,UI按钮点击调用分享的功能吧

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour
{public Button loginBtn;// Start is called before the first frame updatevoid Start(){WeChatSDK.Init();//初始化微信SDKloginBtn.onClick.AddListener(()=> {Debug.Log("开始分享");WeChatSDK.Login(); });}
}

10.最后打包Xcode项目

Xcode处理

通过 CocoaPods 集成微信sdk

1.Xcode项目的根目录打开控制台,输入命令:touch podfile,会看到这个名字的文件,打开它并编写

# Uncomment the next line to define a global platform for your projectplatform :ios, '11.0'target 'Unity-iPhone' do//'引号内为你的Xcode项目名字,我的默认叫Unity-iPhone'# Uncomment the next line if you're using Swift or would like to use dynamic frameworks# use_frameworks!# Pods for 项目文件名,目前为止最新的已经到1.8.4pod 'WechatOpenSDK'end

2.继续在根目录控制台输入:pod install,等待完成安装微信的WechatOpenSDK
3.打开.xcworkspace工程,在info里输入微信的3个白名单,info的改变代码:

<key>LSApplicationQueriesSchemes</key><array><!-- 微信 URL Scheme 白名单--><string>weixinULAPI</string><string>weixin</string><string>weixinURLParamsAPI</string>
</array>

重启项目后就可以在info看到这个key
4.Xcode打包ios的签名证书啥的看其他博客,这里跳过。
5.开始打包,我打包中遇到了这些问题:

解决:这里只需要在Xcode中将BitCode改为No
还有这个错,是缺少WebKit
解决:添加webkit
最后打包测试

video

点击按钮跳转到微信分享,由于App还在审核中,我随便加的Appid和Universal Links,所以有这个错,不过我们已经可以调用打开微信进行分享了,应用审核完就填入正确的Appid和Universal Links,就不会有这个窗口了!

untiy接入微信SDK实现iOS分享相关推荐

  1. Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...

  2. cocos2dx3.15接入微信SDK实现登录和分享android studio2.3.3

    cocos2dx3.15接入微信SDK实现登录和分享android studio2.3.3,首先开始呢,我必须得吐槽一下网上的教程以及微信开放平台官网,网上的教程主要是太老了代码虽然都能用但是不完整有 ...

  3. 手把手教你简单接入微信SDK

    就看微信现在这么火的样子,如果你的APP不接入微信的SDK好像就有点脱离了时代大车轮一样.一个成功的APP,不单单凭借着一个好的想法,一个好的功能,最主要还是用户量.用户量就好像是水,我们的APP就一 ...

  4. 如何绕过微信sdk审核进行分享?

    如何绕过微信sdk审核进行分享? 可能有的朋友会问我为什么要绕过微信sdk审核?这里我就不做过多的解释,如果能够进行正常分享的像用原生的sdk,友盟这类的自然就不用考虑这些,但是有的app分享的内容正 ...

  5. 微信首页登录html页面,H5页面接入微信授权登录和分享

    前期准备 接入微信授权 分静默授权和非静默授权两种 静默授权: scope=snsapi_base,没有弹窗,只能获取用户的openId. 非静默授权: scope=snsapi_userinfo,有 ...

  6. android第三方应用,Android 第三方应用接入微信平台研究情况分享(一)

    微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发 ...

  7. 不用微信SDK实现图片分享或文字分享

    1.把图片分享给朋友 //分享图片给朋友(不用微信sdk)private void shareToFriend(Uri u){Intent intent = new Intent();Componen ...

  8. python接入微信支付_干货分享:微信跨境支付接入全流程

    [什么是微信支付?] 微信支付,是微信向有出售物品/提供服务需求的商家提供: 推广销售.支付收款.经营分析的整套解决方案. 包括多种支付方式,如付款码支付.JSAPI支付.小程序支付.APP支付.电脑 ...

  9. cocoscreator 接入微信sdk分享时可以拉起分享弹窗但是选择好友后就是分享不出去的解决方法

    发现在分享的时候可以拉起分享弹窗但是选择好友后就是分享不出去,后来发现是因为混淆的原因,在proguard-rules文件中加入混淆即可: -keep class com.tencent.mm.ope ...

最新文章

  1. JS魔法堂:IE5~9的DragDrop API
  2. Oracle Golden Gate 系列十七 -- GG 一对多 real-time data distribution 说明 与 示例
  3. Linq 通过反射动态查询对象
  4. Code First :使用Entity. Framework编程(7) ----转发 收藏
  5. php新特性:trait 关键字使用
  6. 用Python看蜜雪冰城店铺在哪个省份最多~
  7. Virtualbox 修改硬盘的序列号等信息 例
  8. java俄罗斯方块简单代码_Java简易俄罗斯方块
  9. 寄存器PLC地址与寄存器modbus协议地址
  10. dos2unix 目录
  11. 如何在命令行下用命令slmgr激活windows8系统
  12. python二十行代码教你批量采集超高清 jpg
  13. MySQL —— 初识MySQL
  14. 手机安全卫士的一些总结
  15. 免费多功能转码机器人(小程序转码机器人)
  16. 信息化也需要雅俗包装
  17. linux 程序结构,Objective-C 基本的程序结构
  18. JAVA浮点数转人民币读法_算法--java实现将数字转换成人民币大写(迅雷面试题)...
  19. .ipynb如何转为.py
  20. Epoch, Batch, Iteration 区别

热门文章

  1. 视觉SLAM十四讲读书笔记(5)P40-P52
  2. 51cto十周年征文:我的技术我做主
  3. ios中位置权限_iOS 13中的位置权限
  4. idea 调整字体间距
  5. 微信/易信公共平台开发(四):公众号调试器 (仿真微信平台,提供PHP源码)
  6. 中职计算机应用技术是学什么的,自贡职业技术学校:计算机应用技术
  7. win10开机右击文件夹卡死,转圈圈
  8. 功能测试如何转型自动化测试
  9. 语音合成离线sdk linux,iOS SDK
  10. arduino平台人体红外感应传感器+蜂鸣器简单实现自动报警