iOS-CrackRock 1.0.0

iOS-CrackRock 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可协议 WTFPL
发布最后发布2014年12月

未声明的所有者 维护。



 
依赖项
BrynKit/Main>= 1.2.1
BrynKit/RACHelpers>= 1.2.1
BrynKit/GCDThreadsafe>= 1.2.1
BrynKit/EDColor>= 1.2.1
BrynKit/CocoaLumberjack>= 1.2.1
CocoaLumberjack>= 0
ReactiveCocoa>= 1.4.0
ReactiveCocoa/RACExtensions>= 1.4.0
StateMachine-GCDThreadsafe>= 2.0.1
Underscore.m>= 0.2.0
libextobjc/EXTBlockMethod>= 0.2.5
libextobjc/EXTScope>= 0.2.5
libextobjc/EXTSynthesize>= 0.2.5
libextobjc/NSMethodSignature+EXT>= 0.2.5
 

  • bryn austin bellomy

// iOS crack rock

如:一种难以抗拒的街头药物

crackrock

(分歧)

什么

为酿造这种美味的 iOS 药水提供辅助。

在底层广泛使用了 GitHub 的优秀库 ReactiveCocoa,强烈推荐使用它来与 iOS-CrackRock 进行交互。

如何

一些有用的属性

也许将以下属性添加到负责你的 SECrackRock 实现的类中将很有帮助。

@property (nonatomic, strong, readwrite) SECrackRock *crackRock;
@property (nonatomic, strong, readwrite) NSSet *availablePowerups;
@property (nonatomic, strong, readwrite) NSSet *allProducts;

@property (nonatomic, strong, readonly)  NSSet *paidProducts;
@property (nonatomic, strong, readonly)  NSSet *freeProducts;

声明你的 IAP 产品

除了常规产品外,在适当的时候,您还可以声明“免费”产品。当您的应用程序销售产品(例如,Instagram 风格的图片过滤器)但也默认提供一组减少的这些产品时,这非常有用。

由于这些“免费”产品不需要查询 IAP 服务器,因此您需要在初始化这些产品时指定所有必要的元数据(基本上只是名称和描述,除非您子类化 SECrackRockProduct 并添加其他内容)。您的“付费”产品只需指定产品 ID - -[SECrackRockProduct initWithProductID:readableName:productDescription:isFree:] 的其他参数可以简单地指定为 nil

- (NSSet *) freeProducts
{
    NSArray *productMetadata = @[
        @{  @"product id": @"freeproduct1",
            @"name": @"super jump",
            @"description": @"boing boing boing",
            @"is powerup": @YES,
            @"free": @YES, },

        @{  @"product id": @"freeproduct2",
            @"name": @"power walk",
            @"description": @"get swole",
            @"is powerup": @NO,
            @"free": @YES, },
    ];
    return [self productsFromMetadata: productMetadata];
}

- (NSSet *) paidProducts
{
    NSArray *productMetadata = @[
        @{  @"product id": @"paidproduct1", @"is powerup": @YES, },
        @{  @"product id": @"paidproduct2", @"is powerup": @NO,  },
    ];
    return [self productsFromMetadata: productMetadata];
}

- (NSSet *) productsFromMetadata: (NSArray *)productMetadata
{
    NSMutableSet *products = [NSMutableSet set];
    for (NSDictionary *metadata in productMetadata) {
        SECrackRockProduct *product = nil;
        if ([metadata[@"is powerup"] boolValue] == YES) {
            product = [MyAppPowerUpProduct initWithProductID: metadata[@"product id"]
                                                readableName: metadata[@"name"]
                                          productDescription: metadata[@"description"]
                                                      isFree: metadata[@"free"]];
        }
        else {
            product = [SECrackRockProduct initWithProductID: metadata[@"product id"]
                                               readableName: metadata[@"name"]
                                         productDescription: metadata[@"description"]
                                                     isFree: metadata[@"free"]];
        }
        [products addObject: product];
    }
    return products;
}

初始化 crack rock

将以下内容添加到应用程序中负责启动应用程序内购买功能的任何部分。这最好在 -application:didFinishLaunchingWithOptions: 中进行。

- (BOOL)              application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.crackRock = [[SECrackRock alloc] initWithFreeProducts: freeProducts
                                                  paidProducts: paidProducts];

    // ...
}

反应性 crack

谈到 ReactiveCocoa,您可能会发现设置以下属性很有好处。

RAC(self.allProducts) =
    [RACSignal combineLatest: @[
            [RACAbleWithStart([self freeProducts]) distinctUntilChanged],
            [RACAbleWithStart([self paidProducts]) distinctUntilChanged], ]
        reduce:^id (NSSet *freeProducts, NSSet *paidProducts) {
            return [freeProducts setByAddingObjectsFromSet: paidProducts];
        }];

RAC(self.availablePowerups) =
    [[RACAbleWithStart(self.crackRock.freeAndPurchasedProducts)
        distinctUntilChanged]
        map:^id (NSSet *freeAndPurchasedProducts) {
            NSMutableSet *availablePowerups = [NSMutableSet set];

            for (SECrackRockProduct *product in freeAndPurchasedProducts) {
                if ([product isKindOfClass: [MyAppPowerUpProducts class]]) {
                    [availablePowerups addObject: product];
                }
            }
            return availablePowerups;
        }];
}

买一些东西

当您购买和恢复项目时,SECrackRock的特性将发送KVO通知。您可以使用KVO或类似ReactiveCocoa的框架来观察这些属性,并根据需要更新用户界面和应用程序状态。

[self.crackRock purchase: productID
              completion:^(NSError *error) {
                  if (error != nil) {
                      NSLog(@"purchase error = %@", error);
                      return;
                  }

                  NSLog(@"purchase success!");
              }];

恢复同样简单。

[self.crackRock restoreAllPurchases:^(NSError *error) {
    if (error != nil) {
        NSLog(@"error = %@", error);
        return;
    }

    NSLog(@"restore success!");
}];

许可 (WTFPL)

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 版本 2,2004年12月

版权 (C) 2004 Sam Hocevar <[email protected]>

每个人都可以复制和分发本许可文档的准确或修改后的副本,且修改后只要更改名称即可。

DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 复制、分发和修改条款

  1. 只要你想怎么做就怎么做。