手机游戏接入海外sdk

一.FaceBook

1.登录fb官网获取需要的参数,appId,app key, bundle id.(需要翻墙)

2.集成sdk到项目中(ios主要用xcode)。将Bolts.framework,FBSDKCoreKit.Framework,FBSDKLoginKit.Framework,FBSDKShareKit.Framework拖拽至项目的Frameworks中。在拖拽选项中选择Copy items if needed和Create groups。

3.配置xcode工程

右键点击info.plist文件,选择open as source code

设置URLSchemes.

复制粘贴以下代码到XML的中

<key>CFBundleURLTypes</key>

<array>

<dict>

<key>CFBundleURLSchemes</key>

<array>

<string>FB AppId</string>

</array>

</dict>

</array>

<key>FacebookAppID</key>

<string>FB AppId</string>

<key>FacebookDisplayName</key>

<string>应用名称</string>

注:这儿可能会崩溃,打开info->URL Types添加url

设置白名单【ios9特有】

LSApplicationQueriesSchemes

fbapi

fb-messenger-api

fbauth2

fbshareextension

4.添加系统资源库

点击target->General->Linked Frameworks and Libraries,点击左下角的+号按钮

Security.framework

libiconv.dylib

SystemConfiguration.framework

CoreGraphics.Framework

libsqlite3.dylib

CoreTelephony.framework

libstdc++.dylib

libz.dylib

Accounts.framework

5.fb登录时会打开浏览器,需要添加如下代码:

a.引入头文件

#import

#import

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

{

[SDKManagerinitSDK:@"FaceBookSDK"];

[FBSDKProfileenableUpdatesOnAccessTokenChange:YES];

[[FBSDKApplicationDelegatesharedInstance]application:applicationdidFinishLaunchingWithOptions:launchOptions];

[[NSNotificationCenterdefaultCenter]addObserverForName:FBSDKProfileDidChangeNotificationobject:nilqueue:nilusingBlock:^(NSNotification*note) {

NSLog(@"FBSDKProfileDidChangeNotification");

}];

}

- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options

{

return[[FBSDKApplicationDelegatesharedInstance]application:appopenURL:urlsourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];

}

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {

return[[FBSDKApplicationDelegatesharedInstance]application:application

openURL:url

sourceApplication:sourceApplication

annotation:annotation

];

}

b.记录应用被激活

- (void)applicationDidBecomeActive:(UIApplication*)application {

cocos2d::Director::getInstance()->resume();

[FBSDKAppEventsactivateApp];

}

6.ok,准备工作完成,接下来正式开始登录

FaceBookSDK.h

游戏内登录可以直接走网页登录,所以省略interface builder这个界面。直接用FBSDKLoginManager来登录。

登录成功后按照js和lua不同的回调方式将参数传回loginSuccess。[此示例为js]

二:亚马逊商城

1.翻墙到亚马逊官网下载最新版sdk和demo.demo的代码直接可以拿来用

2.准备工作。配置AndroidManifest.xml文件

..

<receiver

android:name="com.amazon.device.iap.ResponseReceiver">

<intent-filter>

<action android:name="com.amazon.inapp.purchasing.NOTIFY"

android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY"/>

</intent-filter>

<receiver/>

..

</application>

3.将IAP API与应用集成

在onCreate()方法中调用registerListener()。

在onResume()方法中调用getUserData()。

在onResume()方法中调用getPurchaseUpdates()。

在onResume()方法中调用getProductData()。

代码如下:

private SampleIapManager sampleIapManager;

protected void onCreate(final Bundle saveInstanceState) {

super.onCreate(saveInstanceState);

this.setupIAPOnCreate();

}

publicvoidsetupIAPOnCreate(){

sampleIapManager=newSampleIapManager(this);

sampleIapManager.activate();

finalSamplePurchasingListenerpurchasingListener=newSamplePurchasingListener(sampleIapManager);

PurchasingService.registerListener(SDKManager.getContext(),purchasingListener);

System.out.print("IS_SANDBOX_MODE:"+ PurchasingService.IS_SANDBOX_MODE);

}

protectedvoidonPause() {

super.onPause();

sampleIapManager.deactivate();

}

protectedvoidonResume() {

super.onResume();

sampleIapManager.activate();

PurchasingService.getUserData();

PurchasingService.getPurchaseUpdates(false);

}

4.得到sku.将demo中的sku改为自己项目中的产品列表

publicenumMySku {

productUs1(“珍珠1","US"),

productUs2(“珍珠2","US"),

productUs3(“珍珠3","US”);

}

publicstaticMySku fromSku(finalStringsku,finalStringmarketplace) {

MySkumySku=null;

if(productUs1.getSku().equals(sku) && (productUs1.getAvailableMarketplace().equals (marketplace))) {

mySku=productUs1;

}

if(productUs2.getSku().equals(sku) && (productUs2.getAvailableMarketplace().equals (marketplace))) {

mySku=productUs2;

}

if(productUs3.getSku().equals(sku) && (productUs3.getAvailableMarketplace().equals (marketplace))) {

mySku=productUs3;

}

if(productUs4.getSku().equals(sku) && (productUs4.getAvailableMarketplace().equals (marketplace))) {

mySku=productUs4;

}

if(productUs5.getSku().equals(sku) && (productUs5.getAvailableMarketplace().equals (marketplace))) {

mySku=productUs5;

}

if(productUs6.getSku().equals(sku) && (productUs6.getAvailableMarketplace().equals (marketplace))) {

mySku=productUs6;

}

returnmySku;

}

5.购买代码(此处为js和java交互)

publicvoidsetYMXSKUs(StringskuJson){

try{

JSONObjectjo=newJSONObject(skuJson);

JSONArrayskus=jo.getJSONArray("skus");

productSkus=newHashSet();

for(inti=0;i

productSkus.add(skus.getString(i));

}

}catch(JSONExceptionee) {

}

}

publicvoidonBuyOrangeClick(Stringsku,Stringmarketplace) {

MySkumySku= MySku.fromSku(sku,marketplace);

finalRequestIdrequestId= PurchasingService.purchase(mySku.getSku());

}

//回调PurchasingListener,主要修改onPurchaseResponse

publicvoidonPurchaseResponse(finalPurchaseResponseresponse) {

finalStringrequestId=response.getRequestId().toString();

finalStringuserId=response.getUserData().getUserId();

finalPurchaseResponse.RequestStatusstatus=response.getRequestStatus();

Log.d(TAG,"onPurchaseResponse: requestId ("+requestId

+") userId ("

+userId

+") purchaseRequestStatus ("

+status

+")");

switch(status) {

caseSUCCESSFUL:

finalReceiptreceipt=response.getReceipt();

iapManager.setAmazonUserId(response.getUserData().getUserId(),response.getUserData().getMarketplace());

Log.d(TAG,"onPurchaseResponse: receipt json11:"+receipt.toJSON());

iapManager.handleReceipt(receipt,response.getUserData());

iapManager.refreshOranges();

try{

JSONObjectjson=newJSONObject();

json.put("userId",userId);

json.put("receipt",receipt.toJSON());

json.put("requestId",requestId);

Stringdata=json.toString();

Stringarg= String.format("bs.SDKManager.getInstance().paySuccess("+data+")");

SDKManager.dispatchEvent(arg);

}catch(JSONExceptione) {

e.printStackTrace();

}

break;

caseALREADY_PURCHASED:

Log.d(TAG,"onPurchaseResponse: already purchased, should never get here for a consumable.");

break;

caseINVALID_SKU:

Log.d(TAG,

"onPurchaseResponse: invalid SKU!  onProductDataResponse should have disabled buy button already.");

finalSetunavailableSkus=newHashSet();

unavailableSkus.add(response.getReceipt().getSku());

iapManager.disablePurchaseForSkus(unavailableSkus);

break;

caseFAILED:

caseNOT_SUPPORTED:

Log.d(TAG,"onPurchaseResponse: failed so remove purchase request from local storage");

iapManager.purchaseFailed(response.getReceipt().getSku());

break;

}

}

注:测试流程,在亚马逊下载amazon tester app,然后在应用页面下载产品列表的.json文件。通过adb push .json /mnt/sdcard/  到手机就可以测试沙盒环境下的支付。测试通过后提交应用到后台,通过后可测试正式环境。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容