Bootstrap

京城游戏人-Day11: Unity 中实现 IAP 内购(内付费)

京城游戏人-Day11: Unity 中实现 IAP 内购(内付费)

-

-

一、先说基本流程
  • 在 iTunes Connect 中创建 IAP(In-App Purchase)
  • 编写 Objective-C 的代码
  • 编写 Unity C# 的代码
  • 生成 iOS 工程,并在 Xcode 中调试

其中在 iTunes Connect 中的操作,与研发关系不大,这里省略。

二、编写 Objective-C 代码

创建两个类,分别是 IAPInterface,主要用于两种语言之间的交互调用。另一个是 IAPManager。注意这两个类的名字叫什么并不重要。

2.1 IAPInterface.h
#import <Foundation/Foundation.h>

@interface IAPInterface : NSObject
@end
2.2 IAPInterface.m
#import "IAPInterface.h"
#import "IAPManager.h"

@implementation IAPInterface

...

@end

其中...包括如下方法。

// Unity to iOS
void TestMsg() {
    NSLog(@"Msg recved");        
}

// Unity to iOS
void TestSendString(void *p) {
    NSString *list = [NSString stringWithUTF8String:p];
    NSArray *listItems = [list componentsSeparateByString:@"\t"];
    for (int i = 0; i < listItems.count; ++i) {
        NSLog(@"msg %d: %@", i, listItems[i]);
    }
}

// iOS to Unity
void TestGetString() {
    NSArray *test = [NSArray arrayWithObjects:@"t1", @"t2", @"t3", nil];
    NSString *join = [test componentsJoinedByString:@"\n"];
    UnitySendMessage("Main", "IOSToU", [join UTF8String]);
}

并且要增加一个私有成员变量:IAPManager *iapManager = nil;

void InitIAPManager(){
    iapManager = [[IAPManager alloc] init];
    [iapManager attachObserver];
}

bool IsProductAvailable(){
    return [iapManager CanMakePayment];
}

// 获取商品信息
void RequstProductInfo(void *p){
    NSString *list = [NSString stringWithUTF8String:p];
 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;