2016年9月26日 星期一

Google Domains信用卡無法結帳(You appear to be in a country where Google Domains is not yet available.)

之前買的Google Domains服務快到期了,於是再去購買,只是會出現如下的錯誤訊息:
Oops! We couldn't checkout your cart. Please try again later. 
這時才想起來,去年也是卡在這裡,而且還有另一個訊息:
You appear to be in a country where Google Domains is not yet available.
記得只要把地址改一改就行了,於是就去Google Wallet去改信用卡的地址,只是改完後,還是一樣無法結帳。
後來只好按下這一串You appear to be in a country where Google Domains is not yet available.後方的Learn more,就會顯示一個對話框:

接著選 Wait, i have a US  Billing address.然後就會有個介面跳到改信用卡的地址或增加信用卡,我再增加一張信用卡就可以買了,地址別忘了要美國的地址,奇怪的地方在於增加的信用卡是重復輸入的,改的也是Google Wallet的設定。但自己去Google Wallet改好像沒用。

2016年9月10日 星期六

play-games-plugin-for-unity 與 googleads-mobile-unity 混用

雖然有人把google play services和admob的Unity3D plugin都寫好了,但同時使用也是要動手微調一下,不然可能就會碰到以下2種錯誤。
Failed to re-package resources
Unable to convert classes into dex format
先把Unity和plugin的版本列出

Unity3D 5.3

Unity3D的google play services plugin 0.9.34
https://github.com/playgameservices/play-games-plugin-for-unity

Unity3D的admob plugin 3.0.5
https://github.com/googleads/googleads-mobile-unity/releases

將2種plugin合起來用需要做些修改,可參考以下網址:
https://ndesostyle.wordpress.com/2016/02/10/conflict-with-latest-googleads-mobile-and-play-games-plugin-for-unity/

網頁上的重點是這一段字後面的影片連結:
Fixing google play games and admob plugin Unity. Video tutorial is Available  Youtube

可惜裡面用的版本有點舊了,我再把改的過程記錄一下。

1.先裝play-games-plugin-for-unity,若碰到
Unity3D No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version').
錯誤,可先看之前這篇的方法
http://chadgod.blogspot.tw/2016/09/unity3d-no-resource-found-that-matches.html
沒問題後再把admob plugin裝上

2.打開Assets/GooglePlayGames/Editor/GPGSUpgrader.cs
在97行的地方把以下2行註解掉
//string clientDir = "Assets/Plugins/Android/google-play-services_lib";
//GPGSUtil.DeleteDirIfExists(clientDir);

3.打開Assets/GooglePlayGames/Editor/GPGSDependencies.cs
在67行的地方註解掉
//svcSupport.DependOn("com.android.support",
//"support-v4",
//"23.1+");
後面加上
svcSupport.DependOn("com.google.android.gms",
"play-services-ads",
PluginVersion.PlayServicesVersionConstraint);

4.打開Assets/Plugins/Android/GoogleMobileAdsPlugin/AndroidManifest.xml
在23~25行註解掉
<!-- <activity android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
android:theme="@android:style/Theme.Translucent" /> -->

5.改好後回到Unity3D編輯器會跳出一個對話框內容如下
Remove or replace support-v4 version 23.4.0 with version 23.1.1?
我選了ok

6.這時就可以先Build看看了,若成功就可以到以下網址看Unity的admob範例
https://developers.google.com/mobile-ads-sdk/docs/games?hl=zh-tw#unity

7.若失敗也只能在找看看有沒有其它方法了,附上使用的android sdk,提供一些線索。
Tools
Android SDK Tools 25.1.7
Android SDK Platform-tools 24.0.2
Android SDK Build-tools 23.0.2

Android 6.0

Extras
Android Support Repository 36
Google Play services 32
Google Repository 32
Google Play APK Expansion library 1
Google Play Licensing Library 1
Intel x86 Emulator Accelerator(HAXM installer) 6.0.3



2016年9月8日 星期四

Unity3D No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version').


在Unity3D 5.3 加上google play service的功能會先去下載下面的plugin
https://github.com/playgameservices/play-games-plugin-for-unity
不意外的,又有如標題的錯誤了.

大部份解法都是去android sdk目錄下的 extras\google\google_play_services 找檔案來用,但我實在是找不到那些神奇的檔案。
不過下面這個網址倒是有不一樣的解法,可以參考看看
https://app-c.net/tutorial/unity/version5_2/

他是直接把 @integer/google_play_services_version 這變數換成字串,如下
<meta-data android:name="com.google.android.gms.version"
android:value="4323000" />

到這裡可以編釋了,過了一段時間回頭看這個值又變回@integer/google_play_services_version了,估計是在
Window->GooglePlayGames->setup->Android setup...
的設定完成後就變回去了,所以說不定一開始把這個欄位刪除也可以先編釋。

順便提一下使用EnableSaveGames()碰到的問題:
在設定PlayGamesClientConfiguration時,有加上EnableSaveGames(),而且
在google play開發平台上該設定的都有設定,但登入後遊戲就是會跳掉,那麼可參考如下:
https://developers.google.com/games/services/console/configuring
其實就是進入手機上的設定->應用程式->Google Play 服務->管理空間->清除所有資料。
就沒問題了。害我以為改錯什麼,又浪費了我好幾個小時...

2016年7月29日 星期五

FastCGI 處理序超過設定的活動逾時

  這是在查 "IIS 500 內部伺服器錯誤" 時碰到的,雖然解法一狗票,但第一步還是要先把
IIS設定內的 "錯誤網頁->編輯功能設定->本機要求的詳細錯誤及遠端要求的自定錯誤網頁",
改選成詳細錯誤。
  然後就看到標題的錯誤訊息了,那要怎麼設定呢?
若IIS的設定UI若有fastCgi的項目就可以進去設定了,但我的IIS沒有。
所以先用記事本打開c:\Window\System32\inetsrv\config\applicationHost.config
先找到 fastCgi

<fastCgi>
    <application fullPath="C:\PHP5\php-cgi.exe" />
</fastCgi>
後面再加上參數,改成如下:

<fastCgi>
    <application fullPath="C:\PHP5\php-cgi.exe" idleTimeout="900" activityTimeout="180" requestTimeout="10000" instanceMaxRequests="10000" />
</fastCgi>

那些數值可以自行調整,改好後存檔,在命令列執行iisreset重啟IIS後就可以了。

2016年7月7日 星期四

自定Unity3D選單

以下為Unity3D 5.3版。

在Unity3D內加上自定的選單是很簡單的,以C#為例:

1.選擇 Assets->Create->C# Script

2.Script內容改成如下:

using UnityEngine;
using System.Collections;
#if UNITY_EDITOR
using UnityEditor;
#ENDIF

#if UNITY_EDITOR
[AddComponentMenu("my menu 1/my menu 2")]
#endif
public class MyMenu : MonoBehaviour {
    #if UNITY_EDITOR
    [MenuItem("my menu 3/ my menu 4")]
    #endif
    static void mytest(){
    }

    void Start () {

    }
    void Update () {

    }
}

然後就可以在Component選單看到新的 my menu 1 子項目,

以及新的 my menu 3 選單。


我做了個實驗,在Assets下建了新的資料夾,然後把Script放進去後,

只剩 my menu 3 項目有出現。

疑?AddComponentMenu這個功能失敗了嗎?不過把Script放回Assets資料夾後,

這個功能又正常了,所以要注意一下放的位置。

2016年7月6日 星期三

MAC下的android開發環境

先下載JDK,在終端機上輸入:
java -version
若沒裝JDK會如下顯示












這時選更多資訊,會到java的官網上,去選擇下載Mac OS X x64版本的JDK






















下載完成後就是安裝了,裝好了再用java -version確認一下就可以了。
















然後到android官網http://developer.android.com/sdk/index.html下載Android Studio,按下綠色按紐即可














安裝時沒什麼大問題,這邊我也把Virtual Device給裝上去,下一步也有一些選項,反正我都是全選。

















安裝到一半出現了錯誤訊息:The following SDK component was not installed: sys-img-x86-addon-google_apis-google-21
,Retry給它按下去讓它再裝下去,直到Finish可以按為止。
安裝完成後開了一個新專案測試了一下,還算順利,只是接上手機時沒有一下就抓到,要等一下,這樣就可以開發了。


Unity3D在Mac上開2個專案

  想同時在Unity3D開啟2個專案,在Edit->preference下的
Show Project Wizard at Startup項目打勾就可以了,不過在5.3版上找不到這個項目,在MAC環境下找到另一種方式。
1.打開終端機

2.cd ~                             進入使用者目錄

3.sudo vi .bash_profile      編輯bash_profile(不習慣用vi編輯的可改用別種編輯器)

4.加入以下2行後存檔(alias 後面的 un 和 mono 可改成自己習慣的名稱)
  alias un="/Applications/Unity/Unity.app/Contents/MacOS/Unity -projectPath"
  alias mono='open -n /Applications/Unity/MonoDevelop.app'

5.回到使用者目錄輸入 source .bash_profile

以後在終端機下輸入 un 就可以打開另一個專案了

2016年3月24日 星期四

申請Apple Developer Program碰到的問題

Is awesome!
申請了Apple Developer Program(以前是叫iOS Developer Program),
也碰到了這個經典問題:

We are unable to activate your Apple Developer Program membership.


其實申請前也爬了一些文,像是姓名,住址與信用卡不同,或是填了中文資料等,
會讓申請很不順利。

所以我特別注意資料不要填錯,全程使用英文輸入,也收到了購買成功的訊息。
(疑?跟以前比好像更貴了,不過這不是重點)

接著就等收啟動信了,但等了一天沒收到。
於是登入會員中心後,就發現上面的錯誤訊息了,看時間客服都下班了。
明天再打電話去問吧,而且從頭到尾也沒收到啟動的通知

雖然很多文章都說留言或寄信沒用,不過我還是先用了線上回報,反應了這個問題。
結果隔天就收到信了,大意就是帳號已開通,可以使用。

反正帳號能用,所以最後連電話也不用打了,希望大家申請時比我順利。

2016年3月19日 星期六

cocos2d-X接入UnityAds(iOS版)

1.去官網註冊,取得廣告的GAME ID,並下載sdk,解壓縮後放好,選framework會用到,

2.在Xcode專案下的General->Linked Frameworks and Libraries增加以下項目
CFNetwork.framework
CoreFoundation.framework
UnityAds.bundle
UnityAds.framework
StoreKit.framework
AdSupport.framework
SystemConfiguration.framework
CoreTelephony.framework
CoreMedia.framework


3.在Xcode專案下的Build Settings->Search Paths->Framework Search Paths
加上UnityAds.Bundle所在的目錄,不然之後會出現UnityAds/UnityAds.h' file not found


4.修改AppController.h

#import <UIKit/UIKit.h>

#import <UnityAds/UnityAds.h>//<---新增這行

@class RootViewController;

//注意下面紅色新增的字符
@interface AppController : NSObject <UIApplicationDelegate,UnityAdsDelegate> {
    UIWindow *window;
}

@property(nonatomic, readonly) RootViewController* viewController;


@end

5.修改AppController.mm

先找到下面這幾行:
    // Use RootViewController manage CCEAGLView     _viewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];    _viewController.wantsFullScreenLayout = YES;    _viewController.view = eaglView;

接著往後加這幾行(注意紅色的數字,替換成自己的廣告Game ID):
    //Unity Ads
    [[UnityAds sharedInstance] setTestMode:YES];//測試時打開
    [[UnityAds sharedInstance] setDebugMode:YES];//測試時打開
    [[UnityAds sharedInstance] startWithGameId:@"1234567" andViewController:_viewController];
    [[UnityAds sharedInstance] setDelegate:self];
然後在這個檔案找個合適的地方加上這個函式(廣告播完後會到這):
    - (void)unityAdsVideoCompleted:(NSString *)rewardItemKey skipped:(BOOL)skipped
    {
    
    }

6.增加UnityAdsWrapper.h到專案內(跟AppController.h放同目錄)
    class UnityAdsWrapper
    {
    public:
        static bool canShow();
        static void show();
    };

7.增加UnityAdsWrapper.mm到專案內(跟UnityAdsWrapper.h放同目錄)
    #import <Foundation/Foundation.h>
    #import <UnityAds/UnityAds.h>
    #import "UnityAdsWrapper.h"

    bool UnityAdsWrapper::canShow()
    {
        if ([[UnityAds sharedInstance] canShow] && [[UnityAds sharedInstance] canShowAds]) {
            return true;
        } else {
            return false;
        }
    }
    void UnityAdsWrapper::show()
    {
        [[UnityAds sharedInstance] show];
    }
    void UnityAdsWrapper::hide()
    {
        [[UnityAds sharedInstance] hide];
    }

8.然後就可以在模擬器測試了,別忘了加入#include "UnityAdsWrapper.h"
    然後用以下程式碼測試:
    if(UnityAdsWrapper::canShow()){
        UnityAdsWrapper::show();
    }



2016年2月29日 星期一

在android studio編譯cocos2d-x

雖然在專案目錄下直接下指令cocos compile -p android —android-studio就可以編譯程式,若可在android studio內直接按快速鍵^R立即編譯就更方便了。

安裝的版本:
cocos v3.10
android studio 1.5.1


先選擇Run->Edit Configurations


再選擇專案,這裡的範例是mytest4


同樣的畫面下方注意到Before launch: 這個區塊有個+號,按下去


選第一個Run External tool


各欄位填入
Name: Cocos compile
Program: cocos
Parameters: compile -p android —no-apk —android-studio
Working directory: $ProjectFileDir$ 

然後按下ok就完成了。但這裡還有個地方要注意,要把新增的Cocos compile移到
Gradle-aware Make的上方,就像第三張圖那樣,編譯時就會先跑c++,再包成apk。