ParseのAndroidでCheckManifestエラー

2014/8/4 1789hit

Parseの実装をしててlogcatでエラーを吐いて、pushが受け取れなくなりました。
AndroidManifestのパーミッションに不備があると言われるのですが、何回見ても不備が分かりません。

Parseのclassファイルを眺めて、チェックコードを丸々移植してエラーになってるマニフェストを調べると
yourpackagename.permission.C2D_MESSAGEがなくて怒られます。
checkPermissionってcom.google以外のマニフェストチェックに使えるの??
getPermissionInfoしてNameNotFoundException出なけきゃおkじゃダメなの?
Parse側の実装がおかしい気がしますが、治るの待ってらんないので治します。
Javaのいい所はリフレクション。
どうすればロジックがパーミッション不備を吐かないか調べて、無理矢理ロジックを通してしまいます。
Application.javaに以下のコードを埋め込んで、呼べば動き出しました。


private void checkManifest()
{
final String permissionName = getPackageName() + ".permission.C2D_MESSAGE";
try {
if (getPackageManager().getPackageInfo("com.google.android.gsf", 0) == null) {
LogUtil.e(TAG, "gcm is not supported");
return;
}
} catch (NameNotFoundException e) {
LogUtil.e(TAG, "gcm is not supported");
return;
}

try {
getPackageManager().getPermissionInfo(permissionName, PackageManager.GET_PERMISSIONS);
if (getPackageManager().checkPermission(permissionName, getPackageName()) != PackageManager.PERMISSION_GRANTED) {
Object pushType = null;
try {
Class<?> clsPushType = Class.forName("com.parse.PushType");
Field fldGcm = clsPushType.getField("GCM");
pushType = fldGcm.get(null);
Class<?> clsManifestInfo = Class.forName("com.parse.ManifestInfo");
Field fldPushType = clsManifestInfo.getDeclaredField("pushType");
fldPushType.setAccessible(true);
fldPushType.set(null, pushType);
} catch (ClassNotFoundException e) {
LogUtil.e(TAG, "reflaction fail ClassNotFoundException");
} catch (IllegalArgumentException e) {
LogUtil.e(TAG, "reflaction fail IllegalArgumentException");
} catch (IllegalAccessException e) {
LogUtil.e(TAG, "reflaction fail IllegalAccessException");
} catch (NoSuchFieldException e) {
LogUtil.e(TAG, "reflaction fail NoSuchFieldException");
}
}
} catch (final NameNotFoundException e) {
LogUtil.e(TAG, "permission not found c2d");
}
}


え?
解決方がおかしい!?

前:vagrant&berkshelfでdevianのvm作ろうとしたら激オコ 次:vagrant with nokogiri

関連キーワード

[Android][Java][IT][Unity]

コメントを投稿する

名前URI
コメント