手機游戲接入海外sdk

一.FaceBook

1.登錄fb官網(wǎng)獲取需要的參數(shù),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

設(shè)置URLSchemes.

復(fù)制粘貼以下代碼到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>應(yīng)用名稱</string>

注:這兒可能會崩潰,打開info->URL Types添加url

設(shè)置白名單【ios9特有】

LSApplicationQueriesSchemes

fbapi

fb-messenger-api

fbauth2

fbshareextension

4.添加系統(tǒng)資源庫

點擊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.記錄應(yīng)用被激活

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

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

[FBSDKAppEventsactivateApp];

}

6.ok,準(zhǔn)備工作完成,接下來正式開始登錄

FaceBookSDK.h

游戲內(nèi)登錄可以直接走網(wǎng)頁登錄,所以省略interface builder這個界面。直接用FBSDKLoginManager來登錄。

登錄成功后按照js和lua不同的回調(diào)方式將參數(shù)傳回loginSuccess。[此示例為js]

二:亞馬遜商城

1.翻墻到亞馬遜官網(wǎng)下載最新版sdk和demo.demo的代碼直接可以拿來用

2.準(zhǔn)備工作。配置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與應(yīng)用集成

在onCreate()方法中調(diào)用registerListener()。

在onResume()方法中調(diào)用getUserData()。

在onResume()方法中調(diào)用getPurchaseUpdates()。

在onResume()方法中調(diào)用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改為自己項目中的產(chǎn)品列表

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());

}

//回調(diào)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,然后在應(yīng)用頁面下載產(chǎn)品列表的.json文件。通過adb push .json /mnt/sdcard/? 到手機就可以測試沙盒環(huán)境下的支付。測試通過后提交應(yīng)用到后臺,通過后可測試正式環(huán)境。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,699評論 19 139
  • 搜狗 Passport iOS SDK 是搜狗為開發(fā)者提供的第三方單點登錄和搜狗賬戶注冊登錄服務(wù)。本版本提供的第三...
    Www劉閱讀 2,449評論 2 1
  • 參考書目 《如何成為一個學(xué)習(xí)忍者》 有個手機廣告語至今印象深刻:充電五分鐘,通話兩小時??梢姵L待機的重要性。今...
    萌小Q在路上閱讀 2,579評論 8 10
  • 我想:愛情應(yīng)該是世間最妙不可言的東西了吧。 你不會知道下一秒你會遇見誰?你不會知道下一秒你會和誰在一起?你不會知道...
    哆哆cherish閱讀 926評論 0 3
  • 備課: 昨兒個引出了非謂語動詞的三種形式(過去分詞,動名詞,動詞不定式),明天要繼續(xù)深入地探究非謂語動詞。 上課:...
    小椰閱讀 372評論 0 0

友情鏈接更多精彩內(nèi)容