Upgrade to Pro — share decks privately, control downloads, hide ads and more …

課金処理とたたかう.pdf

 課金処理とたたかう.pdf

potatotips #62で発表したスライドです!
https://potatotips.connpass.com/event/129207/

010b92be8b6508ea7da9a0fa5ce3040b?s=128

Nobuyuki Nishiyama

June 18, 2019
Tweet

More Decks by Nobuyuki Nishiyama

Other Decks in Programming

Transcript

  1. QPUBUPUJQT ՝ۚॲཧͱ͔ͨͨ͏ʂ ΅ͬͪήʔϜσϕϩού ੢ࢁ৴ߦɹ

  2. ੿࡞ΞϓϦʮύζϧˍϞφʔΫʯ ສμ΢ϯϩʔυಥഁ

  3. ࣮͸՝ۚॲཧͷ࣮૷͸ॳΊͯʂ

  4. ࠓͲ͖0CKFDUJWF$Ͱ՝ۚॲཧΛ ॻ͍ͨϨΞέʔεʂ

  5. ʮ՝ۚͨ͠ΒΞϓϦ͕ىಈ͠ͳ͘ ͳͬͨʂʯ

  6. खݩͷ؀ڥͰ࠶ݱͰ͖ͳ͍ʜ

  7. ͱΓ͋͑ͣιʔείʔυΛಡΉ

  8. ͓΍ʁ // 課金成功時に記録を保存する void purchased(std::string id) { // 課金ID→内部ID std::map<std::string,

    std::string> tbl{ { "PERCHASE01", "PERCHASE-01" }, { "PERCHASE02", "PERCHASE-02" }, }; // 課金ID→内部ID にしたのを保存 setRecord(tbl.at(id)); }
  9. // 課金成功時に記録を保存する void purchased(std::string id) { // 課金ID→内部ID std::map<std::string, std::string>

    tbl{ { "PERCHASE01", "PERCHASE-01" }, { "PERCHASE02", "PERCHASE-02" }, }; // 無効な課金IDだとここでアプリが落ちる setRecord(tbl.at(id)); }
  10. ͬ͞͞ͱमਖ਼ // 課金成功時に記録を保存する void purchased(std::string id) { // 課金ID→内部ID std::map<std::string,

    std::string> tbl{ { "PERCHASE01", "PERCHASE-01" }, { "PERCHASE02", "PERCHASE-02" }, }; // 無効なIDでなければ処理する if (tbl.count(id)) { setRecord(tbl.at(id)); } }
  11. ͬͦ͘͞௚ͯ͠όʔδϣϯΞοϓ ਃ੥ʂ

  12. ʮ΍ͬͺΓىಈ͠·ͤΜɻʯ

  13. ;ͨͨͼιʔείʔυΛಡΉ

  14. ͓΍ʁ // 課金情報を取得 void price(NSString* product_id, id<SKProductsRequestDelegate> viewController) { NSSet<NSString*>*

    id_set = [NSSet setWithObject:product_id]; // リクエストを生成 SKProductsRequest* request = [[[SKProductsRequest alloc] initWithProductIdentifiers:id_set] autorelease]; request.delegate = viewController; // 取得開始! [request start]; }
  15. উखʹղ์ͨ͠Βμϝͳ΍ͭʜʁ // 課金情報を取得 void price(NSString* product_id, id<SKProductsRequestDelegate> viewController) { NSSet<NSString*>*

    id_set = [NSSet setWithObject:product_id]; // リクエストを生成 SKProductsRequest* request = [[[SKProductsRequest alloc] initWithProductIdentifiers:id_set] autorelease]; request.delegate = viewController; // 取得開始! [request start]; }
  16. ͬͦ͘͞௚ͯ͠όʔδϣϯΞοϓ ਃ੥ʂ

  17. ʮ΍ͬͺΓىಈ͠·ͤΜɻʯ

  18. ·ͨιʔείʔυΛಡΉͱ͜Ζ͔ Β͔ʜ

  19. ͱʜ͜͜ͰϢʔβʔ͔Βͷوॏͳ ৘ใ͕ʂ

  20. ৘ใ̍ʮ՝ۚ࣌ʹΫϨδοτΧʔ υ൪߸Λొ࿥ͨ͠ʯ

  21. wϢʔβʔ͕ॳΊͯ՝ۚͨ࣌͠ͷڍಈ wΞϓϦ͔Β"QQ4UPSF΁ը໘ભҠͯ͠ɺ·ͨΞϓ Ϧʹ໭ͬͯ͘Δύλʔϯ

  22. ৘ใ̎ʮΫϥογϡϩάʹͦΕΒ ͖͠৘ใ͕ʂʯ

  23. None
  24. ͜Ε͔ʂ // 課金成功時の処理 void provideContent(NSString* productIdentifier) { // IDをNSString→std::stringにして課金完了処理へ purchase_completed([productIdentifier

    UTF8String]); } // 課金完了処理 void purchase_completed(std::string& id) { // 色々処理 }
  25. // 課金成功時の処理 void provideContent(NSString* productIdentifier) { // 変換結果が null の場合があり得る

    purchase_completed([productIdentifier UTF8String]); } // 課金完了処理 void purchase_completed(std::string& id) { // idが null の場合にアプリが落ちる }
  26. ͜͏௚ͨ͠ // 課金成功時の処理 - (void)provideContent:(NSString *)productIdentifier { std::string id =

    productIdentifier ? [productIdentifier UTF8String] : ""; ngs::purchase_completed(id); } // 課金完了処理 void purchase_completed(std::string& id) { // idがnullになることはない }
  27. ʮىಈ͠·ͨ͠ʂ͋Γ͕ͱ͏͟͝ ͍·͢ʂʂʂʂʯ

  28. ໿̎ϲֻ݄͚ͯղܾʂ

  29. wखݩͰ࠶ݱͰ͖ͳ͍ෆ۩߹ͷղܾ͸೉͍͠ wϢʔβʔ͔Βͷࠣ͘͝ࡉͳใࠂ΋ݟಀ͞ͳ͍ w͖͋ΒΊͳ͍ؾ࣋ͪ ·ͱΊ

  30. w5XJUUFS!NJOHBNF w'BDFCPPLNJOHBNF w(JU)VCUFLOJTIJ wΞϓϦͷιʔείʔυIUUQTHJUIVCDPN UFLOJTIJ1V[[MF"OE.POBSDI ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ